我很长很长时间没有做过任何严肃的C,并且很乐意快速解释。以下代码在HP / UX上编译并运行正常。它在Ubuntu中对GCC 4.3.2进行编译时没有任何警告(即使使用gcc-Wall),但在Linux上运行时会出现段错误。
任何人都可以解释原因吗?
#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);
}
答案 0 :(得分:8)
您的人员阵列实际上是char const *people[]
。文字字符串通常在许多系统上的只读存储器中。你不能写信给他们。显然,HP / UX并非如此。
答案 1 :(得分:2)
字符串文字位于只读数据段中。试图写入它们是违反分段的行为。
答案 2 :(得分:0)
您无法修改字符串文字。