简单的C代码可以在HPUX上正常工作,但是Linux上的段错误。 为什么?

我很长时间没有做过任何严肃的C,希望能够快速解释一下。 以下代码在HP / UX上编译并运行良好。 它在GCC 4.3.2上编译没有任何警告(甚至是在gcc-Wall中),但在Linux上运行时却是segfaults。

谁能解释为什么?

#include <stdio.h> int main() { char *people[] = { "Abigail", "Bob" }; printf("First: '%s'\n", people[0]); printf("Second: '%s'\n", people[1]); /* this segfaults on Linux but works OK on HP/UX */ people[1][0] = 'R'; printf("First: '%s'\n",people[0]); return(0); } 

Solutions Collecting From Web of "简单的C代码可以在HPUX上正常工作,但是Linux上的段错误。 为什么?"

你的人数组实际上是一个char const *people[] 。 文字串通常在许多系统的只读存储器中。 你不能写信给他们。 显然,在HP / UX上情况并非如此。

字符串文字处于只读数据段。 尝试写入他们是违反分段。

你不能修改字符串文字。