2013-12-22 80 views
0

我正在讀取文本文件(.txt)並獲取其中的值。C - 將文本讀入char數組並打印問題

這裏是我的代碼:

// Definitions. 
FILE* file; 
date t1, calc[99999]; 
int index = 0, counter = 0, i; 
char info[100]; 
char *newInfo[9999]; 

while(!feof(file)){ 
       fscanf(file, "%s %d %d %d\n", info, &t1.day, &t1.month, &t1.year); 
       newInfo[index] = info; 
       calc[index].day = t1.day; 
       calc[index].month = t1.month; 
       calc[index].year = t1.year; 
       printf("read: %s %d %d %d\n", info, t1.day, t1.month, t1.year); 
       index++; 
       counter++; 
     } 

結果是:

line_1 01 01 2011 
line_2 02 02 2012 
line_3 03 03 2013 

這是好到目前爲止,但是當我試圖把它們打印出來while循環,它總是最後打印值是line_3

for(i = 0; i < counter; i++) 
printf("%s %d %d %d\n", newInfo[i], calc[i].day, calc[i].month, calc[i].year); 

結果是:

line_3 01 01 2011 
line_3 02 02 2012 
line_3 03 03 2013 

它應該打印結果如我所料(我在上面顯示)。

我正在轉讓newInfo[index] = info;行和增加index變量。但它仍然只顯示我最新的文字。

任何幫助將不勝感激。

+0

接近這個問題的重複已被問了很多次之前。與往常一樣,困難在於確定它是重複的問題。 –

+0

爲什麼巨大的數組? –

+1

@JonathanLeffler一位智者曾感嘆說:「將會再次發生什麼,已經完成的事情將會再次發生;在陽光下沒有任何新東西。」# –

回答

3

C語言中的字符串並不是一流的對象 - 它們只是數組的一個特例,它們本身只是指針的特例。其中的一個後果就是分配等操作不像你期望的那樣工作。該行

newInfo[index] = info; 

不復制字符串「信息」,它複製基礎指針。爲了複製一個字符串,你需要使用「strcpy()」(如果你已經爲字符串分配了空間)或者「strdup()」(如果你沒有)(然後你需要記住釋放內存分配)。在你的代碼中,你可以用

newInfo[index] = strdup(info); 
2

那麼,每次將信息保存到同一個數組中,將info表示的指針(數組的起點)複製到NewInfo[index],這沒有幫助。

您必須爲要輸入的字符串分配空間,並將其分配給NewInfo[index]。簡單地說,如果你的系統有它是:

NewInfo[index] = strdup(info); 
4

newinfo的師生比是一個數組。每個指針設置爲指向infoinfo將持有它讀取的最後一個東西,因此newinfo中的每個指針都將指向最後一次讀取的內容。