1
#include <stdio.h>

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

I receive a segmentation fault when executing this code. Does anyone know the reason?

Thanks in advance.

4

2 回答 2

4

您正在分配一个由字符串常量占用的位置,这是一种未定义的行为。如果你知道你的字符串的最大长度,你可以这样做:

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

这不是一个精确的等价物,但它应该可以工作。如果你不知道最大长度,或者不想在这里和那里浪费几个字节,你仍然可以通过更多的工作来完成它:

char aa[] = "aa";
char bbbb[] = "bbbb";
char *ss[] = {aa, bbbb};
于 2012-04-17T15:49:00.130 回答
3

您正在尝试更新文字常量,这是不允许的。这将导致未定义的行为。

于 2012-04-17T15:48:47.013 回答