fread 返回 0

fread 函数一直返回 0,检查过读取的数量不会超过文件大小,错误发生在打开文件时错误。

错误代码如下:

FILE *in_file, *out_file;
unsigned int open_files(const char *in_file_name, const char *out_file_name)
{
    if( in_file = fopen(in_file_name, "rb") == NULL)  //err
        return 0;

    if( out_file = fopen(out_file_name, "wb") == NULL) //err
        return 0;

    return 1;   
}

正确应该是:

FILE *in_file, *out_file;
unsigned int open_files(const char *in_file_name, const char *out_file_name)
{
    if( (in_file = fopen(in_file_name, "rb")) == NULL)
        return 0;

    if( (out_file = fopen(out_file_name, "wb")) == NULL)
        return 0;

    return 1;   
}

错误的原因在于没有使用括号,而比较运算符 == 的优先级比赋值运算符 = 要高。因此,错误的程序执行结果为,函数正常打开了文件,返回的文件指针与 NULL 相比为0,赋值给了 in_file, if 中的语句不会执行,因此误以为 in_file 是文件指针,实际上为0,所以无法读出数据。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
引用[1]:在C语言中,fread函数用于从文件中读取数据。它的原型为:size_t fread(void *ptr, size_t size, size_t count, FILE *stream)。其中,ptr是指向存储读取数据的缓冲区的指针,size是每个数据项的字节数,count是要读取的数据项的个数,stream是指向要读取的文件的指针。fread函数返回实际读取的数据项个数。在引用[1]中的示例中,fread函数被用来从文件中读取数据到缓冲区buff中,每次读取1023个字节,然后将读取到的数据打印出来。[1] 引用[2]:fgets函数用于从文件中读取一行数据。它的原型为:char *fgets(char *str, int n, FILE *stream)。其中,str是指向存储读取数据的缓冲区的指针,n是要读取的最大字符数(包括换行符),stream是指向要读取的文件的指针。fgets函数返回读取到的字符串的指针。在引用[1]中的示例中,fgets函数被用来从文件中读取全文,并将读取到的内容存储在缓冲区buff中,然后将缓冲区的内容打印出来。[1] 问题: fread和fgets函数有什么区别? 回答: fread函数和fgets函数都可以用于从文件中读取数据,但它们有一些区别。fread函数是按照指定的字节数和数据项个数来读取数据的,而fgets函数是按照一行一行来读取数据的。fread函数返回实际读取的数据项个数,而fgets函数返回读取到的字符串的指针。另外,fgets函数会将换行符也读取进来,而fread函数不会。所以,如果需要按照指定的字节数和数据项个数来读取数据,可以使用fread函数;如果需要按照一行一行来读取数据,可以使用fgets函数。[1][2]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cyang812

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值