使用C中的指针对字符串数组中的seg进行错误

时间:2015-03-13 16:26:03

标签: c arrays string pointers

我在这里尝试做的是使用指针打印字符串数组的所有元素。我不使用计数器的原因是因为我不知道数组的大小。我只知道它总是以空字符结束。运行下面的代码给我直到最后一个元素(" 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;
     }
}

3 个答案:

答案 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或将数组中的最后一个条目更改为空字符串(“”)。