#include <stdio.h>
void main(){
char *str[]={"aa","bb"};
str[0][0]='h';
}
При получении этого кода я получаю ошибку сегментации. Кто-нибудь знает причину?присвоение ошибки сегментации сегмента
Заранее спасибо.
#include <stdio.h>
void main(){
char *str[]={"aa","bb"};
str[0][0]='h';
}
При получении этого кода я получаю ошибку сегментации. Кто-нибудь знает причину?присвоение ошибки сегментации сегмента
Заранее спасибо.
Вы назначаете место, занимаемое строковой константой, неопределенным поведением. Если вы знаете максимальные длины ваших строк, вы можете сделать это:
char ss[][3] = {"aa", "bb"};
Это не точный эквивалент, но он должен работать. Если вы не знаете максимальную длину, или не хотят тратить несколько байт здесь и там, вы все еще можете вытащить его с немного больше работы:
char aa[] = "aa";
char bbbb[] = "bbbb";
char *ss[] = {aa, bbbb};
Вы пытаетесь обновить константу литерала, что не допускается. Это приведет к неопределенному поведению.
Не требуется * работать ISO C, а не * разрешено * этим компилятором/средой (по крайней мере по умолчанию: может быть способ запросить его работу). GCC использовал это для поддержки '-fwritable-strings', для которой был удален. – Kaz
возможно дубликат [Сегментация Fault С Char массива и указатель в C на Linux] (http://stackoverflow.com/questions/1773079/segmentation-fault-with-char-array-and-pointer-in-c-on-linux) – Timbo