2012-11-06 56 views
2

輸出說,當文件fileIn的文字按順序正確打印時,所有數組值都是「焦慮」。我的問題可能在realloc()中?fscanf變量設置不正確。可能realloc()

ReadIn = malloc(sizeof(char) * 50); 

    while(fscanf(fileIn, "%s", ReadIn) != EOF){ 
     wordlist = (char **)realloc(wordlist, (numwords + 1) * sizeof(char*)); 
     printf("%s\n",ReadIn); 
     wordlist[numwords] = ReadIn; 
     numwords++; 
    } 

    for(i = 0; i < numwords; i++){ 
     printf("%d %s\n", i , wordlist[i]); 
    } 

輸出:

This 
is 
a 
journey 
into 
fear 
and 
anxiety. 
0 anxiety. 
1 anxiety. 
2 anxiety. 
3 anxiety. 
4 anxiety. 
5 anxiety. 
6 anxiety. 
7 anxiety. 

回答

3

你讓每個數組指針指向ReadIn緩衝,這將包含在讀最後一個字符串

要複製每個讀過串在:

//change: wordlist[numwords] = ReadIn; 
wordlist[numwords] = strdup(ReadIn); 

你還應該注意釋放每一個當您完成wordlist陣列時,會出現字符串。

如果你的編譯器的運行時庫沒有非標準但普通的函數,它很容易實現(或者找到一個公共域版本)。

+0

Program4.c:在函數'main'中: Program4.c:49:warning:隱式聲明函數'strdup' Program4.c:49:warning:賦值使得整型指針沒有轉換 – Jared

+0

它可以工作!謝謝。我只是不喜歡這些錯誤。使用迂迴ansi和Wall – Jared

+0

@Jared:'#include '應該得到'strdup()'的正確聲明。 –

0

wordlist [numwords] = ReadIn;

在上面的行中,您只是簡單地指定'ReadIn'的地址而不是字符串。所以從'ReadIn'中包含的文件中讀取的最後一個字符串已被重複打印。

所以,你需要讀字符串複製到您的字符串數組,

的strcpy(單詞表[NUMWORDS],閱讀下載);