#include <stdio.h>
#include <string.h>
int main()
{
char s1[100]="";
char s2[]="我爱,";
char s3[]="慕课网";
strcat(s2,s3);
strcpy(s1,s2);
printf("%s\n",s1);
return 0;
}
吐槽一下:本站应该把同类问题进行下归类,显示在相应课程中,因为用户在发问前都不会先去搜索之前的答案...
正文:
首先,s1、s2 和 s3 都是什么:
s1是一个长度为100的字符数组。
s2是一个长度为4的字符数组。这是因为虽然你在声明时没有指定数组的长度,但是你用一个长度为4的字符串初始化s2,所以编译器自动将s2的长度确定为4。
s3是一个长度为4的字符数组。道理同上。
再说strcat函数会干什么:
strcat(s2, s3) 这个函数是将s3中的内容(包括s3结尾的'\0')复制到s2中最后一个字符的后面(覆盖掉s2原来结尾的'\0'),这样就能把两个字符串中的字符连起来了,并且还是'\0'结尾。
注意:这就需要s2有足够的长度来容纳这么多的字符,长度至少为 strlen(s2) + strlen(s3) + 1,最后这个1就是结尾的'\0'。
但是你的s2长度只有4,所以写越界了。在调用用strcat、strcpy之类的函数时一定要注意是否有足够的存储空间来容纳你要操作的字符。如果你越界了,你的代码是可以编译通过的,但在运行的时候很可能就会发生错误,这就是所谓的“缓冲区溢出”错误,可能会引起严重的问题。
在本站的这个题目中,它看到你写了 strcat(s1, ...) 这样的代码才算对,因为s1的空间足够多。
最后提示下:本站帖子里有格式化代码的功能,你可以不用手打代码格式。
我也是这么干的