4

我已经很久很久没有做过任何严肃的 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);
}
4

3 回答 3

8

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

于 2011-07-19T23:32:25.880 回答
2

字符串文字位于只读数据段中。尝试写入它们是违反分段的。

于 2011-07-19T23:32:06.817 回答
0

您不能修改字符串文字。

于 2011-07-19T23:33:40.530 回答