2014-09-25 42 views
-2

我想實現這個 ls -l | myprogram。C中的分段錯誤與陣列和打印陣列正確關聯

Myprogram將pipe的輸出作爲輸入並將每個單詞放入數組中。 然後我打印出一行一行的數組,每行8個單詞。

我寫了一段代碼,但它給出了段錯誤,並且不打印我的字數組。這裏有什麼問題?初學者在這裏....

#include <stdio.h> 
    #include <string.h> 
    int main(int argc, char **argv){ 

    int result,i; 
    int j=0; 
    char string[80]; 
    char wordArray [80]; 


    do {  
      result=scanf("%s",string); 

      strcpy(wordArray[j], string); 
      printf("%s\n", wordArray[j]); 
      j++; 

    } 
      while (result!=EOF); 

    for (i=0; i<7;i++){ 
    printf("%s ",wordArray[i]); 

    }     
    return 0; 
} 
+0

可變wordArray是一個字符串就像變量字符串。如果你想要它是一個字符串數組,你需要一個二維數組,如下所示:char wordArray [1000] [80] – 2014-09-25 04:05:30

+0

在程序中沒有聲明「字的數組」。你有一個char數組。 – PaulMcKenzie 2014-09-25 04:05:32

+0

您正在嘗試讀取一個字符串,然後將其複製到一個沒有足夠空間存儲的數組中。 – 2014-09-25 04:05:40

回答

2

至少這個函數調用無效

strcpy(wordArray[j], string); 

參數wordArray[j]有類型char而函數的第一個參數的類型爲char *

你必須定義一組字符數組。例如

char wordArray[7][80]; 

只要輸入的字符串的數量不超過7

考慮到第二圈應該像

for (i = 0; i < j; i++){ 

另外,在第一循環是無效的,因爲雖然在循環的最後一次迭代中的結果等於EOF,但是您嘗試將未輸入的字符串string複製到數組中(因爲結果等於EOF,則意味着沒有輸入任何內容,因此最後一個有效字符串將被複制兩次)