问题描述
#include<studio.h>
#include<string.h>
int main ()
{
char *name="Kaveri";
char *rd="Rajshekhar";
strcat(name,rd);
puts(name);
return 0;
}
解决方法
要使strcat()
工作,目标缓冲区必须是可写的,并且必须足够长,以容纳具有空终止符的并置输出。在手册页中:
strcat()
函数将src
字符串追加到dest
字符串,覆盖{{1}末尾的终止空字节('\0'
) },然后添加一个终止的空字节。字符串不能重叠,并且dest
字符串必须有足够的空间用于结果。如果dest
不够大,则程序行为无法预测;
在您的情况下,目标是指向字符串文字的第一个元素的指针,尝试进行修改以调用undefined behaviour。
分段错误是不确定行为的众多副作用之一。
要解决此问题,
-
将
dest
做成一个具有足够大尺寸的数组,例如name
-
使用分配器功能为
char name[128] = "Kaveri";
分配足够的内存,例如name
,然后将 char *name = malloc(128); //sizeof(char) == 1
strcpy(name,"Kaveri");
用作name
的目标缓冲区。