在C中创建一个二进制文件

标签 c file fwrite

我目前正在创建二进制文件。这是我尝试过的。

示例 1:

#include<stdio.h>

int main() {
    /* Create the file */
    int a = 5;
    FILE *fp = fopen ("file.bin", "wb");
    if (fp == NULL)
      return -1;
    fwrite (&a, sizeof (a), 1, fp);
    fclose (fp);
    }

    return 0;
}

示例 2:

#include <stdio.h>
#include <string.h>

int main()
{
    FILE *fp;
    char str[256] = {'\0'};
    strcpy(str, "3aae71a74243fb7a2bb9b594c9ea3ab4");
    fp = fopen("file.bin", "wb");
    if(fp == NULL)
        return -1;
    fwrite(str, sizeof str, 1, fp);
    return 0;
}

示例 1 以二进制形式给出了正确的输出。但是我传递字符串的示例 2 没有给我正确的输出。它将我提供的输入字符串写入文件并附加一些数据(二进制形式)。

我不明白,我无法弄清楚我在做什么错误。

最佳答案

问题是sizeof str是256,也就是本地声明的字符数组的整个大小。但是,您存储在其中的数据不需要全部 256 个字符。结果是写操作写入字符串的所有字符加上字符数组中已经存在的任何垃圾。尝试以下行作为修复:

fwrite(str, strlen(str), 1, fp);

关于在C中创建一个二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30810036/

相关文章:

python - 用python制作查找表,写入可以在C程序中读取的二进制文件

c - 如何将文本添加到c语言的结束文件文本中

c++ - 编写 multimap fo 文件 Fast way c++

c++ - 你可以通过 fseek 过去的 EOF 创建未定义的数据吗?

c - 将数据从文件写入 C 上的结构

c - 通过 make 将 GSL 链接到 C

c - 不使用时删除posix共享内存?

c - 从链表中删除给定节点

c - 用 "argv[2]"替换一个字符

php - 使用 fwrite 将文件保存到新目录