2015-10-17 65 views
1

我想在二維指針數組中存儲句子列表。下面的代碼給出了循環evlauted剛過分段錯誤(我查了printf語句;循環內不含語句執行):使用fgets時的分段錯誤()

int main(int argc, char** argv){ 

    char *inputarray[MAX_LINE]; 
    int count = 0; 

    //char cpy[MAX_LENGTH] <---- This one doesn't work either                                                              
    char *cpy = (char*) calloc (MAX_LENGTH, sizeof(char)); 

    while (count <= MAX_LINE && fgets(cpy, MAX_LENGTH, stdin)){ 

    int str_len = strlen(cpy); 
    cpy[--str_len] = '\0'; 

    inputarray[count++] = reverse(cpy, str_len); 

    } 

    printOutput(inputarray, count); 

    return 0; 

}

一直試圖調試爲3小時以上現在沒有用。幫助任何人?

+2

什麼是MAX_LENGTH?你在爲此付出什麼?你能顯示輸入的第一個MAX_LENGTH + 1個字符嗎? – Kalle

+0

[mcve]是必需的。 –

+0

你能展示什麼是逆向功能嗎?其他一些注意事項:1)不要投入calloc的返回(使用c時)。它可以掩蓋重要的警告,並且沒有必要2)fgets將已經null結束字符串,但它看起來像是截斷了輸入的最後一個字符,這是故意的嗎? –

回答

1

您只分配了指向char的指針數組的MAX_LINE元素。

  • 由於數組索引從0開始。
  • 使用條件(count < MAX_LINE),而不是(count <= MAX_LINE

例: 假設你已經分配*inputaray[5]; 這是什麼情況,

count=0; //1st sentence 
count=1; //2nd sentence 
count=2; //3rd sentence 
count=3; //4th sentence 
count=4; //5th sentence 

在上面的代碼,

count=5; //which is <=5 

並因此嘗試將輸入字符串存儲到一個inv alid記憶。

+0

我認爲我的回答是正確的。但我是新來的Stackoverflow回答。 –

+0

好的,繼續。但我的答案+1。 –

+0

只需自己修改一下'inputarray'不是'char數組'。它是他聲明的「指向char的指針數組」。 – ameyCU