我正在尝试将100个整数写入二进制文件。我尝试写入此文件,然后从中读取。从中阅读时,我得到了完全随机的数字。
这是有关写的块。
请注意,我的文件打开了以" WB"模式写的文件。我也在最后关闭了文件。
for (int i = 0; i < 99; i++) {
fwrite(&i, sizeof(int), 1, file);
}
这是有关读取的块。请注意,我确实以" RB"模式打开文件,并且已关闭。
int num;
for (int i = 0; i < 100; i++) {
int rc = getc(file);
if (rc == EOF) {
fputs("Error occured while reading file", stderr);
return EXIT_FAILURE;
}
fread(&num, sizeof(int), 1, file);
printf("%d", num);
}
我的输出就是这样:
-13421772802147469895-168955699232767012640583688388440-104919389914260634872147467638000128293273683884400-19797114882147440795-168947558432767-1097029212883066888388440148657280313254001912147440795-168942592032767-109702911303445504838844014865730434362077432147440795-168935577632767-1097029063753420883766251486573257-6039796492147440795-168932864032767-109702901326841856838844014865733541270-168949760032767-10970289133241241683884401486573450-1090518913214744079500196944831217016018891752457584192041348617175279241952408940298110176910929517683167731702125413116313304413809989891296126535181930809719192433591818324585127960891517680423011935761967-13421772802147469895-168955699232767012640583688388440-104919389914260634872147467638000128293273683884400-19797114882147440795-168947558432767
所以有问题,我不确定到底是什么。也许我不确定我是否了解用于阅读/写作的API(特别是size_t nitems)?我不确定如何从文件中读取/写入多少个字符。
在第一个循环中,您正在编写100个整数,从'i'的地址开始,99次。
不是我认为您在想自己在做的事情。
应该是
fwrite(&i, sizeof(int), 1, file);
其次,您打开哪种模式为编写文件?它应该在二进制模式下打开,否则将无法正确保存二进制数据(将'b'添加到fopen模式值)
您是否关闭并重新打开读取的文件(并设置正确的文件模式?),或者如果我打开打开,您是否在尝试读取值之前会回到文件的开始。
<。