2014-12-04 83 views
0

我在閱讀我的數組內容時遇到了一些問題。我不確定是否正確存儲它,因爲我的結果是每行都是'1304056712'。正確地按行存儲文件內容並稍後打印數組內容

#include <stdio.h> 
#include <stdlib.h> 

#define INPUT "Input1.dat" 

int main(int argc, char **argv) { 
int data_index, char_index; 
int file_data[1000]; 

    FILE *file; 
    int line[5]; 
    file = fopen(INPUT, "r"); 

    if(file) { 
    data_index = 0; 

    while(fgets(line, sizeof line, file) != NULL) { 
    //printf("%s", line); ////// the line seems to be ok here 
    file_data[data_index++] = line; 
    } 

    fclose(file); 
    } 

    int j; 
    for(j = 0; j < data_index; j++) { 
    printf("%i\n", file_data[j]); // when i display data here, i get '1304056712' 
    } 

return 0; 
} 
+0

Input1.dat文件是什麼樣的?它是一個數字列表,每行一個? – 2014-12-04 04:35:58

+0

緩衝區溢出示例 – 2014-12-04 04:39:52

回答

1

我認爲你需要這樣說

file_data [data_index用於++] =的atoi(線);

+0

更正。謝謝。 – HelpNeeder 2014-12-04 04:41:17

1

從您的結果中,我認爲該文件是純文本文件。

您不能簡單地從文件(一個字符串,一個字符數組)讀取一行到一個整數數組中,這是行不通的。當使用指針(如您通過傳遞linefgets())來寫入數據時,將不會執行轉換。相反,你應該將行讀入一個字符數組中,然後使用sscanf(),atoi()或您選擇的其他函數將其轉換爲整數。

1

fgets讀取換行符終止的字符串。如果您正在讀取二進制數據,則需要fread。如果您正在閱讀文本,則應該將線聲明爲足夠大的字符數組,以便用於文件中最長的行。

因爲file_data是char數組,所以file_data [data_index]是單個字符。它被分配了一個指針(int line [5]緩衝區的基地址)。如果讀取二進制數據,file_data應該是一個整數數組。如果讀字符串,它應該是一個字符串數組,即字符指針,就像char * file_data[1000]

你還需要初始化data_index用於= 0的if (file) ...塊外,由於輸出迴路需要它,即使該文件沒有被設置打開。當循環和存儲輸入時,循環應該測試它沒有達到要存儲的數組的大小。