我正在尝试用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”是否存在于其中?
非常感谢任何帮助。
答案 0 :(得分:3)
该行
fwrite(&string,sizeof(string),strlen(string)+1,file);
应该是
fwrite(string, strlen(string)+1, 1, file);
由于
string
而不是&string
strlen(string) +
这就是为什么你得到的输出没有意义,因为它是内存中的随机内容。
修改强>
也
if(file == NULL)
printf("Problem with file\n");
应该是
if(file == NULL) {
printf("Problem with file\n");
return;
}
因为在函数的其余部分
中使用nullfile
可以做的很少
答案 1 :(得分:1)
要以二进制文件写入文件,您应该使用“wb”选项来写入字节。
FILE * file = fopen("file.bin","wb");
至于知道文件是否写得正确,防弹方式(尽管它可能退出更好的方法)只需用“rb”读回文件并以正常格式打印。