2015-03-13 43 views
1

我在這裏要做的是使用指針打印字符串數組的所有元素。我不使用計數器的原因是因爲我不知道數組的大小。我只知道它總是以空字符結尾。運行下面的代碼給了我直到最後一個元素(「星期五」)的元素。然後它給了我一個分段錯誤。我不明白爲什麼。一點幫助,將不勝感激。在使用C中的指針的字符串數組中的seg錯誤

#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

'&**'只會造成麻煩。 – Bathsheba 2015-03-13 16:27:54

+0

''星期五「,'\ 0'}'你陣列的類型不一致。 – HuStmpHrrr 2015-03-13 16:30:12

+0

'while(** parray!= NULL){' - >'while(* parray!= NULL){' – BLUEPIXY 2015-03-13 16:30:53

回答

2

這條線是parray最後一個元素的問題。

while (**parray != '\0'){ 

對於最後一行,*parray爲NULL。通過使用**parray,您正在取消引用NULL指針。更改該行:

while (*parray != NULL){ 

我建議改變初始化:

char *array[]={"mon","tue","wed","thu","fri",NULL}; 

也就是說更具可讀性。

0

數組中的最後一個值是零 - 不是包含null的字符串。所以涉及**parray的測試將取消零引用。請將支票更改爲使用*parray或將數組中的最後一個條目更改爲空字符串(「」)。

2

最後一個元素是空字符。將'\0'更改爲"\0"