我在看一个文件。我的程序中的所有内容都是dinamic。所以我到处都用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循环,因为我想避免反迭代,因为文件是EOF()。我很确定问题是因为那次爆炸。文件已关闭,没有错误。
读取文件后,read_number()函数将继续返回-1。我试过使用fflush,但没什么变化。
非常感谢!我试着把代码中最重要的部分,那部分才是真正的问题所在,但不是全部。如果你不明白,就告诉我。我已经有5天没用了。
最佳答案
不要使用feof(),fread()的返回值就足够了:
do {
.
.
.
} while (fread(...) == number_of_elements) // 0 or a value smaller than number_of_elements means eof or error
关于c - 读取带有fread文件后的垃圾,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20336272/