2016-11-11 52 views
0

我的代碼創建了一個由3個字符串組成的數組,並嘗試使用getline()填充每個字符串。它還打印每次得到的字符串:在循環中使用getline()時的分段錯誤

int i; 
size_t n = 100; 
char (*words[3])[100]; 
for (i = 0; i < 3; i++) 
{ 
    getline(&words[i], &n, stdin); 
    printf("%s\n",words[i]); 
}  

當我輸入下面的命令行的第三個字符串我得到一個分段錯誤。
更重要的是,如果我用5替換3,則在輸入第一個字符串時出現分段錯誤。

所以1)我怎樣才能讓程序存儲所有3或5或任何字符串我給它?和
2)爲什麼如果我替換3與5我得到第一個字符串的錯誤?

+2

您在words'的'的聲明,具有'*'其中意味着有一個或多個指針參與,但你沒有把它們指向任何東西。 –

+0

我認爲這可能實際上也被解釋爲一個函數指針。 – SenselessCoder

+1

@ n.m。如果指針初始化爲NULL,'getline'將執行此操作。 – mch

回答

3

你必須根據man page申報words作爲指針的陣列,並且將其初始化爲NULL

char *words[3] = {NULL}; 

http://ideone.com/GxV9qy

+0

引起混淆的一件事是,我在Linux終端上運行man 3 getline的閱讀手冊頁略有不同。它要求'n'爲0,而你提到的手冊頁說'n'被忽略。 – Sfou