为什么fwrite/fread老是返回1

时间:2022-08-20 07:06:55
我写了一个简单的文件读写代码,但fwrite和fread的返回值总是1,甚至为0。哪位老大能帮忙看看到底是怎么回事。fwrite/fread应该返回读写了多少字节才对啊。下面是我的代码:


int main(void)
{
FILE* file;
int i=0,position=0;
char bufin[1024];
char bufout[]="hello world";
int readbytes=0, writebytes=0;
file=fopen("filetest.txt","w+");
if((writebytes=fwrite(bufout, sizeof(bufout), 1, file))<=0)
{
// 这里返回1
}
position=ftell(file);
rewind(file);
memset(bufin, 0, sizeof(bufin));
if((readbytes=fread(bufin, position, 1, file))<=0)
{
//返回1
}
fseek(file, 512, SEEK_SET);
position=ftell(file);
rewind(file);
if((readbytes=fread(bufin, position, 1, file))<=0)
{
//返回值为0
}
close(file);
}

6 个解决方案

#1


Return Value

fwrite returns the number of full items actually written, which may be less than count if an error occurs. Also, if an error occurs, the file-position indicator cannot be determined.


writebytes=fwrite(bufout, sizeof(bufout), 1, file)

第三个参数为1,当然返回1了。
fread也一样。

#2


fread返回的是读到了多少个数(不是字节)。
fwrite也是类似
你上面限定了只读写一个数当然返回1了

#3


看MSDN,writebytes=fwrite(bufout, sizeof(char), sizeof(bufout),file)

#4


华为技术西安研究所现在招聘软件/硬件开发工程师与软件/硬件测试工程师,需要本科或以上学历,证件要齐全,最好是通信与计算机相关专业,其它理工科专业也可以。软件主要以C语言为主,硬件需要对模电数电以及信号与系统有所了解。工作地在西安。有意者将简历发送至mt.xy@huawei.com,如若有进一步了解需求,请加QQ联系:32227182(说明应聘华为)

#5


你让它返回1,他当然要返回1了

#6


多谢各位!

#1


Return Value

fwrite returns the number of full items actually written, which may be less than count if an error occurs. Also, if an error occurs, the file-position indicator cannot be determined.


writebytes=fwrite(bufout, sizeof(bufout), 1, file)

第三个参数为1,当然返回1了。
fread也一样。

#2


fread返回的是读到了多少个数(不是字节)。
fwrite也是类似
你上面限定了只读写一个数当然返回1了

#3


看MSDN,writebytes=fwrite(bufout, sizeof(char), sizeof(bufout),file)

#4


华为技术西安研究所现在招聘软件/硬件开发工程师与软件/硬件测试工程师,需要本科或以上学历,证件要齐全,最好是通信与计算机相关专业,其它理工科专业也可以。软件主要以C语言为主,硬件需要对模电数电以及信号与系统有所了解。工作地在西安。有意者将简历发送至mt.xy@huawei.com,如若有进一步了解需求,请加QQ联系:32227182(说明应聘华为)

#5


你让它返回1,他当然要返回1了

#6


多谢各位!