我在这里尝试做的是使用指针打印字符串数组的所有元素。我不使用计数器的原因是因为我不知道数组的大小。我只知道它总是以空字符结束。运行下面的代码给我直到最后一个元素(" fri")。然后它给了我一个分段错误。我真的不明白为什么。我们将不胜感激。
#include <stdio.h>
int main(int argv,char *argc[]){
char *array[]={"mon","tue","wed","thu","fri",'\0'};
char **parray;
parray=array;
char *pword;
pword=&**parray;
while (**parray != '\0'){
printf("The first letter is %c\n",**parray);
while (*pword != '\0'){
printf("%c",*pword);
pword++;
}
parray++;
pword=&**parray;
}
}
答案 0 :(得分:2)
此行是parray
的最后一个元素的问题。
while (**parray != '\0'){
对于最后一行,*parray
为NULL。通过使用**parray
,您将取消引用NULL指针。将该行更改为:
while (*parray != NULL){
我建议将初始化更改为:
char *array[]={"mon","tue","wed","thu","fri",NULL};
这更具可读性。
答案 1 :(得分:2)
最后一个元素是空字符。将'\0'
更改为"\0"
。
答案 2 :(得分:0)
数组中的最后一个值为零 - 不是包含null的字符串。因此,涉及**parray
的测试将取消引用该零。更改检查以使用*parray
或将数组中的最后一个条目更改为空字符串(“”)。