使用C将整数读写到二进制文件?

使用C将整数读写到二进制文件?,c,file-io,binary-data,C,File Io,Binary Data,我正在尝试将100个整数写入二进制文件。我试着写入这个文件,并从中读取。当我读它的时候,我得到的是完全随机的数字 这是关于写入的块 请注意,我已使用“wb”模式打开文件进行写入。最后我也关闭了文件 for (int i = 0; i < 99; i++) { fwrite(&i, sizeof(int), 1, file); } 所以有点不对劲,我不确定到底是什么。也许我不确定我是否完全理解用于读/写的API(特别是大小单元)?我不知道如何告诉我需要从一个文件读/写多少字

我正在尝试将100个整数写入二进制文件。我试着写入这个文件,并从中读取。当我读它的时候,我得到的是完全随机的数字

这是关于写入的块

请注意,我已使用“wb”模式打开文件进行写入。最后我也关闭了文件

for (int i = 0; i < 99; i++) {
    fwrite(&i, sizeof(int), 1, file);
}

所以有点不对劲,我不确定到底是什么。也许我不确定我是否完全理解用于读/写的API(特别是大小单元)?我不知道如何告诉我需要从一个文件读/写多少字节。

在第一个循环中,您要从地址“I”开始写入100个整数,99次

不是我想你在想你在做什么

应该是

fwrite(&i, sizeof(int), 1, file);
第二,您以什么方式打开文件进行写入?应以二进制模式打开,否则无法正确保存二进制数据(将“b”添加到fopen模式值)


您是否关闭并重新打开文件以进行读取(并设置正确的文件模式?),或者如果我处于打开状态,您是否在尝试读取值之前返回文件的开头。

此行:
fwrite(&I,sizeof(int),100,file)
是错误的,它应该是:
fwrite(&i,sizeof(int),1,file)我们可以假设“read”块是一个循环的主体,循环重复100次吗?是的,这是一个正确的假设。很抱歉我已经将fwrite改为1,但仍然是同一个问题。发布的问题缺少堆栈溢出的关键标准之一。也就是说,一个完整、简短、干净的编译代码仍然存在问题。
fread
无法进一步读取时将返回零。记住在那之后要优雅地结束,因为这不是一个错误。我刚才已经解决了这个问题。它没有改变任何事情。我怀疑我的阅读可能有问题,在这种情况下,我会用额外的代码更新原始帖子。只是澄清一下,文件是正确打开/关闭的,并且分别用“rb”和“wb”参数定义。是的,这是正确的。我怀疑它与getc()有关。是的,
getc
使用了一个字符,该字符是int的一部分,然后您正在读取另一个(未对齐的)变量。如果您在
%d
之后打印新行,您会发现有时它会“赶上”,但速度不正确。放下
getc
,找到检测EOF的其他方法。这样做了。谢谢。getc还需要什么?
-13421772802147469895-168955699232767012640583688388440-104919389914260634872147467638000128293273683884400-19797114882147440795-168947558432767-1097029212883066888388440148657280313254001912147440795-168942592032767-109702911303445504838844014865730434362077432147440795-168935577632767-1097029063753420883766251486573257-6039796492147440795-168932864032767-109702901326841856838844014865733541270-168949760032767-10970289133241241683884401486573450-1090518913214744079500196944831217016018891752457584192041348617175279241952408940298110176910929517683167731702125413116313304413809989891296126535181930809719192433591818324585127960891517680423011935761967-13421772802147469895-168955699232767012640583688388440-104919389914260634872147467638000128293273683884400-19797114882147440795-168947558432767
fwrite(&i, sizeof(int), 1, file);