用C语言写入二进制文件,解释输出

时间:2016-09-20 23:40:43

标签: c file binaryfiles

我正在尝试用c测试写入二进制文件,只想了解我的输出。

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

void writeToFile();

int main(void) {

    writeToFile();

    return(0);
}

void writeToFile() {
    FILE * file = fopen("file.bin","w");
    char * string;

    if(file == NULL)
        printf("Problem with file\n");

    string = malloc(sizeof(char)*6);

    strcpy(string,"Hello");

    fwrite(&string,sizeof(string),strlen(string)+1,file);

    fclose(file);

}

我正在使用命令解释我的结果:

od -c file.bin

显示八进制输出。 并告诉我:

0000000   @ 022   # 001  \0  \0  \0  \0 020 020   # 001  \0  \0  \0  \0                                                                                         
0000020 300 016 374   ? 377 177  \0  \0 264 006   @  \0  \0  \0  \0  \0                                                                                         
0000040   @  \a   @  \0  \0  \0  \0  \0 200 365   c 274 020 177  \0  \0                                                                                         
0000060

我不知道如何解释这个输出,我知道它是八进制的,但我怎么知道我的字符串“Hello”写得正确?

我在想我可以使用ascii表将输出转换为ascii,但我不确定这是否可行?有没有一种简单的方法可以检查字符串“Hello”是否写得正确?

也许我可以读回输出,并以某种方式检查字符串“Hello”是否存在于其中?

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

该行

 fwrite(&string,sizeof(string),strlen(string)+1,file);

应该是

 fwrite(string, strlen(string)+1, 1, file);

由于

  1. 您已经有一个指向该项目的指针 - 不需要指向该指针的指针 - 因此string而不是&string
  2. 项目的大小为strlen(string) +
  3. 您有一个项目
  4. 这就是为什么你得到的输出没有意义,因为它是内存中的随机内容。

    修改

    if(file == NULL)
        printf("Problem with file\n");
    

    应该是

    if(file == NULL) {
        printf("Problem with file\n");
        return;
     }
    

    因为在函数的其余部分

    中使用null file可以做的很少

答案 1 :(得分:1)

要以二进制文件写入文件,您应该使用“wb”选项来写入字节。

FILE * file = fopen("file.bin","wb");

至于知道文件是否写得正确,防弹方式(尽管它可能退出更好的方法)只需用“rb”读回文件并以正常格式打印。