2012-04-17 5 views
1
#include <stdio.h> 

void main(){ 
    char *str[]={"aa","bb"}; 
    str[0][0]='h'; 
} 

При получении этого кода я получаю ошибку сегментации. Кто-нибудь знает причину?присвоение ошибки сегментации сегмента

Заранее спасибо.

+1

возможно дубликат [Сегментация Fault С Char массива и указатель в C на Linux] (http://stackoverflow.com/questions/1773079/segmentation-fault-with-char-array-and-pointer-in-c-on-linux) – Timbo

ответ

4

Вы назначаете место, занимаемое строковой константой, неопределенным поведением. Если вы знаете максимальные длины ваших строк, вы можете сделать это:

char ss[][3] = {"aa", "bb"}; 

Это не точный эквивалент, но он должен работать. Если вы не знаете максимальную длину, или не хотят тратить несколько байт здесь и там, вы все еще можете вытащить его с немного больше работы:

char aa[] = "aa"; 
char bbbb[] = "bbbb"; 
char *ss[] = {aa, bbbb}; 
3

Вы пытаетесь обновить константу литерала, что не допускается. Это приведет к неопределенному поведению.

+0

Не требуется * работать ISO C, а не * разрешено * этим компилятором/средой (по крайней мере по умолчанию: может быть способ запросить его работу). GCC использовал это для поддержки '-fwritable-strings', для которой был удален. – Kaz

Смежные вопросы