gpt4 book ai didi

c - 使用 fread 读取文件后出现垃圾

转载 作者:太空宇宙 更新时间:2023-11-04 04:46:30 25 4
gpt4 key购买 nike

我正在读取一个文件。我程序中的一切都是动态的。所以我到处都使用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(),我想避免反迭代。我很确定问题出在那个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com