2014-12-04 66 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) ...块外,由于输出回路需要它,即使该文件没有被设置打开。当循环和存储输入时,循环应该测试它没有达到要存储的数组的大小。