我似乎无法弄清楚我做错了什么。我只是简单地对一个字符列表进行修改并尝试打印它们。
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
),如果我注释掉这个函数,我没有得到任何错误(这让我认为这个代码区域就是问题)。我想知道我做错了什么?
答案 0 :(得分:6)
对于第一种循环样式,您需要使用sizeof(char*)
,而不是sizeof(char)
。数组的元素是char*
,而不是char
。
对于第二种循环样式,如果你把它放在那里,你的数组最后只会有一个NULL:
char *name[] = {"RGS", "O", "NRGY", "SIG", "BML-O", "BHI", "KSU", "ORN", NULL};