c - write() 没有在 C 语言的 Windows 上写入正确数量的字节

标签 c windows gcc cl.exe

当在 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/

相关文章:

c++ - tchar 安全函数——UTF-8 常量的计数参数

c - ARM64如何获取CPU品牌信息?

c# - 来自 C# : "DLL initialization routine failed" on Windows 10 的 gcc DLL

c++ - 如何消除针对 c++17 功能的 gcc 警告?

c++ - 如何从 mex 函数返回矩阵结构?

c - 以下 C 程序使用了多少内存?

c错误: assignment makes integer from pointer without a cast [-Werror=int-conversion]

c - 如何使用 [rows][cols] 索引打印出我正在访问的 int* ?

windows - 在Windows CMD文件中,回声后紧跟斜杠是什么意思?

c - C 中的 Vector 和 < > 是什么?