c - 读取具有大值的 unsigned int 时,Fread 返回错误值

标签 c fread unsigned-integer

当我从二进制文件中读取无符号整数时,如果文件中的值相当低,它只会读取正确的值 - 当我尝试读取超过 150,000 的值时,它会给我类似 9000 的值...这很奇怪。然而,较小的数字也可以完美工作,例如 50,000...

unsigned int value;

file = fopen(filePath, "rb");
fseek(file, 0, 0);
fread(&value, sizeof(unsigned int), 1, file);

printf("Value from file: %i\n", value);

二进制文件是在程序运行的同一计算机和操作系统上创建的...我缺少什么?二进制文件已正确创建,其中大多数确实返回正确的值并且工作正常,只有数字较大的文件不会...

最佳答案

您获得了正确的值,但使用了错误的格式字符串来打印它,从而产生了未定义的行为。 %i 用于有符号整数。您需要%u

以上绝对是一个错误,但如果这不是问题的根源,也有可能您在 Windows 上使用旧版编译器,并且编写代码无法以二进制模式打开文件。在这种情况下,如果其中一个字节恰好是 0x0a,则该值可能会被损坏,在这种情况下读回的值将是错误的。

关于c - 读取具有大值的 unsigned int 时,Fread 返回错误值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42826685/

相关文章:

c - 读取C中的结构体?

c - C中的unsigned int和signed int有什么区别?

c - 我想确定 sigsegv 的原因

c - 在不知道整数的实际个数的情况下扫描多个整数

c - 使用与二进制相关的 fread 和 fwrite

c - 在将 fread() 转换为整数时,如果文件大小不是 4 字节的倍数会怎样?

C函数使用指针计算错误

c - 有什么好的选项可以为 C 创建功能性窗口窗体吗?

c - 最适合最大限制为 10^5 的整数的数据类型是什么?

java - 将 32 位无符号整数(大端)转换为长整数并返回