strcpy与strcat的关系
为什么先拼接再拷贝不行呢。。。
2015-01-28
首先你得知道:
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足够长。
举报