简单的 C 代码在 HPUX 上运行良好,但在 Linux 上会出现段错误。为什么?

发布于 2024-11-25 07:08:03 字数 477 浏览 1 评论 0原文

我已经很长一段时间没有做过任何认真的 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);
}

I have not done any serious C in a long, long time and would appreciate a quick explanation. The following code compiles and runs fine on HP/UX. It compiles without any warning on GCC 4.3.2 in Ubuntu (even with gcc -Wall), but segfaults when run on Linux.

Can anyone explain why?

#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);
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

瑕疵 2024-12-02 07:08:03

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

Your people array is in fact a char const *people[]. Literal strings are typically in read-only memory on many systems. You can't write to them. Apparently, this is not the case on HP/UX.

难理解 2024-12-02 07:08:03

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

The string literals are in a read-only data segment. Attempting to write to them is a segmentation violation.

何处潇湘 2024-12-02 07:08:03

您无法修改字符串文字。

You cannot modify string literals.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文