迭代字符列表给出段故障

时间:2012-06-03 00:42:03

标签: c

我似乎无法弄清楚我做错了什么。我只是简单地对一个字符列表进行修改并尝试打印它们。

char *name[] =  {"RGS", "O", "NRGY", "SIG", "BML-O", "BHI", "KSU", "ORN"};
void function() {
    int i;
    //for (i =0; i<sizeof(name) / sizeof(char); i++) {
    for (i =0; name[i] != NULL; i++) {
        printf ("%s \n", name[i]);
    }
}

当我使用第一个for循环(注释掉的那个)时,它打印出列表,但最后有两个项目表示(NULL)并给出了段错误。当我使用第二个for循环(未注释的循环)时,它会打印所有内容,但也会出现段错误。

输出:

RGS 
O 
NRGY 
SIG 
BML-O 
BHI 
KSU 
ORN 
Segmentation fault: 11

编译代码时我没有遇到任何错误(gcc ./learningC.c),如果我注释掉这个函数,我没有得到任何错误(这让我认为这个代码区域就是问题)。我想知道我做错了什么?

1 个答案:

答案 0 :(得分:6)

对于第一种循环样式,您需要使用sizeof(char*),而不是sizeof(char)。数组的元素是char*,而不是char

对于第二种循环样式,如果你把它放在那里,你的数组最后只会有一个NULL:

char *name[] =  {"RGS", "O", "NRGY", "SIG", "BML-O", "BHI", "KSU", "ORN", NULL};