c - 将 3 个整数写入文件并使用 fprintf 和 fscanf 恢复它们

标签 c

我使用以下对 fprintf 的调用将 3 个整数写入文件:

FILE* fid = fopen("c:\\a.bin", "wb");    
a = fprintf(fid, "%d", 2);
b = fprintf(fid, "%d", 576);
c = fprintf(fid, "%d", 5);
fclose(fid);

然后我尝试使用以下调用读回 3 个整数:

int a, b, c;
a = b = c = 0;
FILE* fid = fopen("c:\\a.bin", "rb");
fscanf(fid, "%d%d%d", &a, &b, &c);

调用fscanf后,a、b和c的值分别为25765、0和0。我怎样才能恢复我的号码?为什么对 fprintf 的调用只写入 5 个字节而不是 12 个字节?

最佳答案

如果你想写入二进制整数,你不应该使用fprintf(),它用于打印,即将内存中的数据转换为人类可读的形式.

你应该只做一些fwrite(),即:

const int two = 2;

fwrite(&two, sizeof two, 1, fid);

然后使用 fread() 从打开的二进制读取文件中读回。另外,检查 I/O 调用的返回值。

关于c - 将 3 个整数写入文件并使用 fprintf 和 fscanf 恢复它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26973411/

相关文章:

c# - 我在说 "Assertion failed"之前从未见过的奇怪的 xCode 链接器错误

c - 冒泡排序不排序

c - C 中的数据类型混淆

c - 尝试在 GSL 中使用累积分布函数

c - 代码已成功编译,但未执行 func()。有人请提出所需的更改

c - 按数据包计数的升序打印输出

c - 开放管道上 CloseHandle 上的 sigsegv

c - Double to enum cast 警告类型混合

c - 二维数组。第一个索引错误,其他所有正确

c++ - 可以处理大输入(2 GB)的 JSON 解析器?