c - 在 C 中写入二进制文件不起作用

标签 c file-io binary

<分区>

我有一个 float 组,我想以二进制形式输出到一个文件中。我的相关代码如下:

    FILE *binFile;

    binFile = fopen(fileName, "wb");

    if (binFile)
    {
          fwrite(completeList, sizeof(float), size, binFile);
    }

现在,completeList 是一个指向 float 组的指针,而 size 是我传递给它的另一个参数,指示有多少元素。

当它输出到二进制文件时,打开该文件会显示一堆随机 ASCII 字符。我知道这是我应该期待的,但是当我通过十六进制编辑器输入它时,它显示随机垃圾。

我做错了什么?

编辑:

我的解析代码:

    FILE *bofFile = fopen(file, "rb");

    if(bofFile)
    {
        float *tempArray;

        fseek(bofFile, 0, SEEK_END);

        unsigned long int size = ftell(bofFile) / sizeof(float);

        tempArray = (float *)malloc(size);

        fread(tempArray, sizeof(float), size, bofFile);

        std::cout << tempArray[0];
    }

最佳答案

不知道这是否相关,但你这里有一个相当严重的问题:

tempArray = malloc(size);

您应该更改它以防止缓冲区溢出:

tempArray = malloc(size * sizeof(float));

哦,你还忘记了在阅读之前回到文件的开头(这就是为什么它“什么都不给你”):

fseek(bofFile, 0, SEEK_SET);

关于c - 在 C 中写入二进制文件不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12613663/

相关文章:

Windows 同时物理驱动器访问

Java 扫描器不遍历整个文件

haskell - 在 Haskell 中从文件读取到数组

c - 在文本文件中一次读取多行 - C

分配给相同类型的变量时出现 C 不兼容类型错误

c - 掌握Windows 10的声音管理

c - 当我尝试从函数返回二维结构时如何解决这个问题

c++ - 如何只修改时间码而不修改文本文件中的其他数字或字母?

javascript - JavaScript 中 float 的加法

c++ - 尝试读取二进制文件会清除文件本身