用fread读取文件后的垃圾

时间:2013-12-02 19:29:28

标签: c

我正在阅读一个文件。我程序中的所有内容都是恐怖的。所以我到处都使用malloc。

以这种方式阅读用户输入:

int read_line(char **cad){ 
int size = 0;
char *read=NULL; 
size_t u=0;  
size = (getline(&read, &u, stdin) - 1); 

read[strlen(read)-1] = '\0';
*cad = read;
return size;
}

对于整数:

long int read_number(){
char *cad=NULL;
char *garbage=NULL;
long int option=0;  
if(read_line(&cad) == 0){
    option = -1;
}else{
    option=strtol(cad, &garbage, 10);

    free(cad);
    option = *garbage? -1 : option;
}
return option;
}

事实是,这一直都很完美。但是从我的文件导入数据后,它停止工作。

以下是我阅读数据的方式:

data = (struct data*)malloc(sizeof(struct data));
res = fread(&data->n1, sizeof(int), 1, ptr_file); 
do{                     
res = fread(&data->n2, sizeof(int), 1, ptr_file);                                   
if(res != 0){
    insert_node(&list, data);
}else{
    ret = -1;       
}   
data = (struct data*)malloc(sizeof(struct data));
}while(!feof(ptr_file) && (res = fread(&data->n1, sizeof(int), 1, ptr_file))!=0);   

我做了do ... while循环,因为我想避免de iteration文件是EOF()。我很确定问题是因为那个EOF。文件已关闭且没有错误。

读取文件后,我的read_number()函数继续返回-1。我试过用fflush,但没有任何改变。

非常感谢!我试图把代码中最重要的部分,部分真正的问题,但不是一切。如果你不明白的话就告诉我。我连续5天都遇到了这个问题。

1 个答案:

答案 0 :(得分:0)

不要使用feof(),fread()的返回值就足够了:

do {
.
.
.
} while (fread(...) == number_of_elements) // 0 or a value smaller than number_of_elements means eof or error