Des*_*tor 1 c string pointers runtime-error strcat
我尝试了以下简单的C程序,但它在运行时崩溃而没有提供任何输出.这有什么不对?我怎么解决这个问题?
#include <stdio.h>
#include <string.h>
int main(void)
{
char *s1="segmentation";
char *s2="fault";
char *s3=strcat(s1,s2);
printf("concatanated string is %s",s3);
}
Run Code Online (Sandbox Code Playgroud)
所以这是这个问题的回答:
你不应该试图以任何方式改变字符串文字.根据C标准,更改字符串文字会导致未定义的行为:
"如果这些数组的元素具有适当的值,则未指定这些数组是否是不同的.如果程序试图修改这样的数组,则行为是未定义的."
但是让我们说讨论s1不是字符串文字 - 你仍然需要有足够的缓冲区来让strcat工作 - strcat找到nul终止字符并开始在其上写下你要附加的字符串.如果你的缓冲区不够大 - 你会尝试在数组的bounderies之外写 - 导致再次出现未定义的行为.