Простой код на C отлично работает в HPUX, но в Linux - ошибки. Зачем? - PullRequest
4 голосов
/ 20 июля 2011

Я не делал серьезных С в течение долгого и долгого времени и был бы признателен за быстрое объяснение. Следующий код компилируется и отлично работает на HP / UX. Он компилируется без каких-либо предупреждений в GCC 4.3.2 в Ubuntu (даже с 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);
}

Ответы [ 3 ]

8 голосов
/ 20 июля 2011

Ваш массив людей на самом деле является char const *people[]. Строковые литералы обычно находятся в постоянной памяти во многих системах. Вы не можете написать им. По-видимому, это не относится к HP / UX.

2 голосов
/ 20 июля 2011

Строковые литералы находятся в сегменте данных только для чтения.Попытка написать им является нарушением сегментации.

0 голосов
/ 20 июля 2011

Вы не можете изменять строковые литералы.

...