2

我似乎无法弄清楚我做错了什么。我只是在处理一个字符列表并尝试打印它们。

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)时我没有收到任何错误,如果我注释掉这个函数,我也没有收到任何错误(这让我认为这是代码的问题所在)。我想知道我做错了什么?

4

1 回答 1

6

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

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

char *name[] =  {"RGS", "O", "NRGY", "SIG", "BML-O", "BHI", "KSU", "ORN", NULL};
于 2012-06-03T00:44:00.327 回答