问答详情
源自:6-8 字符串函数

strcpy与strcat的关系

为什么先拼接再拷贝不行呢。。。

提问者:天再高又怎样 2015-01-28 16:27

个回答

  • onemoo
    2015-01-28 23:28:20
    已采纳

    首先你得知道:

    s1是一个长度为100的字符数组。

    s2是一个长度为4的字符数组。这是因为虽然你在声明时没有指定数组的长度,但是你用一个长度为4的字符串初始化s2,所以编译器自动将s2的长度确定为4。

    s3是一个长度为4的字符数组。道理同上。


    strcat(s2, s3) 这个函数是将s3中的内容(包括s3结尾的'\0')复制到s2中最后一个字符的后面(覆盖掉s2原来结尾的'\0'),这样就能把两个字符串中的字符连起来了,并且还是'\0'结尾。

    注意:这就需要s2有足够的长度来容纳这么多的字符,长度至少为 strlen(s2) + strlen(s3) + 1,最后这个1就是结尾的'\0'。


    但是你的s2长度只有4,所以写越界了。而后面的字符有可能写入到了后面,也有可能无法成功写入而发生错误。

    为什么说是有可能呢? 因为strcat这个函数就是从s2的最后写入s3的内容,它不管你这个字符串到底要写多长,也不知道容纳它的数组有多长,其实它都不知道你的字符串是不是在数组中,它只是单纯地在内存中往后写。所以很可能写出界,更糟的是可能会覆盖掉后面的东西,引起各种各样的错误,甚至是崩溃!  所以在真实的开发中千万要注意数组访问越界的问题。

    在本站中它判断你写了 strcat( s1 , s3 ) 才算写对。因为s1足够长。

  • 芥末菌的忧伤
    2015-03-03 12:31:17

    我懂了

  • 天再高又怎样
    2015-01-28 21:44:32

    谢谢啦

    但是我那样做就显示不出来结果了,...

  • 偌颜宁
    2015-01-28 18:49:15

    这个只是个练习,可以按你说的,这里主要的目的是让大家对该方法的使用有个认知和练习