当在 Windows 下用 C 向文件写入值时,我得到了一些似乎错误的信息,并且结果与在 Cygwin 中运行的同一程序不同。
在本例中,我将 float 写入文件:
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <io.h>
int main( void )
{
int fd;
float f;
fd = open("file.a", O_RDWR | O_CREAT);
f = (float)atof("-0.1352237");
printf("%.7f\n", f);
write(fd, (void *)&f, sizeof(float));
close(fd);
printf("sizeof(float): %d\n", sizeof(float));
return (EXIT_SUCCESS);
}
我已经在 Windows 和 Cygwin 上编译并运行了这个文件(没有包含),但没有得到相同的结果。由于我正在编写 float ,因此我希望输出文件写入 4 个字节
但是,在命令行中使用 cl.exe 编译时的输出似乎是错误的:
1578 0d0a be
如果我从文件中读取 float ,显然我没有得到正确的值。并且写入文件的字节数是错误的,应该只是4个字节,而不是5个。
这是我在 Cygwin 中运行时得到的结果:
1578 0abe
这是正确的。如果我将其从文件中读取到 float ,我会得到正确的值(-0.1352237)。
我在这里遗漏了什么吗?这些功能的Windows实现是否有缺陷? 或者也许我没有正确写入数据?
最佳答案
您已在文本模式(默认)下打开文件,因此 0a
("\n"
) 将被转换为 0d0a
> ("\r\n"
)。
您需要使用 O_BINARY
标志以二进制模式打开文件。
关于c - write() 没有在 C 语言的 Windows 上写入正确数量的字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10963762/