【问题标题】:Where do the seg fault come from in this code? [duplicate]这段代码中的段错误来自哪里? [复制]
【发布时间】:2012-12-24 02:42:29
【问题描述】:

可能重复:
Why does char* cause undefined behaviour while char[] doesn’t?

请看下面的代码

int main (int argc, char* argv[])
{   
    char* s = "Hello world!";
    s[0] = 'X';
    return 0;
}

这段代码中的段错误来自哪里?

更新: 相反,下面的代码没有给出段错误,为什么?

int main (int argc, char* argv[])
{   
    char s[] = "Hello world!";
    s[0] = 'X';
    return 0;
}

【问题讨论】:

  • 查看副本。简而言之,char *s = "Hello World!";s 指向字符串文字的(第一个字符),并且尝试修改字符串文字是未定义的行为,通常会导致崩溃,因为它们存储在只读内存中。 char s[] = "Hello World!"; 创建一个可写的char[13]
  • 我们可以为这个特殊的骗子设置一个单独的标签吗? char *variable ="string"; variable[0]='ch';? ;)

标签: c segmentation-fault


【解决方案1】:

"Hello world!"是静态字符串,不能更改。

【讨论】:

  • 请查看我有问题的更新并请更新答案,谢谢!