首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用fread读取文件后的垃圾

使用fread读取文件后的垃圾
EN

Stack Overflow用户
提问于 2013-12-02 19:29:27
回答 1查看 641关注 0票数 1

我在读一份文件。我节目里的每一件事都是迪纳莫。所以我到处都用malloc。

用户输入是这样读的:

代码语言:javascript
复制
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;
}

对于整数:

代码语言:javascript
复制
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;
}

事实上,这件事一直都是完美的。但是,在我从文件中导入数据之后,它就停止工作了。

下面是我读取数据的方式:

代码语言:javascript
复制
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迭代,如果文件是EOF()。我很确定问题是因为那个EOF。该文件已关闭,没有错误。

读取文件后,我的read_number()函数继续返回-1。我试着用了很多东西,但是没有什么改变。

非常感谢!我试着把最重要的部分代码,部分是真正的问题是,但不是所有。如果你不懂什么就告诉我。这件事我已经有5天了。

EN

回答 1

Stack Overflow用户

发布于 2013-12-02 20:04:51

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

代码语言:javascript
复制
do {
.
.
.
} while (fread(...) == number_of_elements) // 0 or a value smaller than number_of_elements means eof or error
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20336272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档