为什么这个简单的C程序在运行时崩溃?

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)

Dav*_*aim 7

所以这是这个问题的回答:

不应该试图以任何方式改变字符串文字.根据C标准,更改字符串文字会导致未定义的行为:

"如果这些数组的元素具有适当的值,则未指定这些数组是否是不同的.如果程序试图修改这样的数组,则行为是未定义的."

但是让我们说讨论s1不是字符串文字 - 你仍然需要有足够的缓冲区来让strcat工作 - strcat找到nul终止字符并开始在其上写下你要附加的字符串.如果你的缓冲区不够大 - 你会尝试在数组的bounderies之外写 - 导致再次出现未定义的行为.

  • 您应该提到尝试以任何方式修改字符串文字是未定义的并且可能会导致崩溃(答案目前暗示OP代码的唯一问题是空间不足) (3认同)
  • @DavidHaim修改**字符串文字**不行. (3认同)
  • @DavidHaim:[在线C 11标准](http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf),6.5.2/7:"这些数组是否未指明如果它们的元素具有适当的值,则它们是不同的.**如果程序试图修改这样的数组,则行为是未定义的.**" (2认同)