我正在尝试打开二进制文件并读取内容以进行类分配。即使在进行研究之后,我也无法在尝试打开时显示任何内容并打印二进制文件的内容。我甚至不确定我应该得到什么,如何检查它是对的,但我知道没有(这是我目前得到的)是坏的。这是我在本网站上搜索得到的代码
#include<stdio.h>
int main()
{
FILE *ptr_myfile;
char buf[8];
ptr_myfile = fopen("packets.1","rb");
if (!ptr_myfile)
{
printf("Unable to open file!");
return 1;
}
fread(buf, 1, 8, ptr_myfile);
printf("First Character: %c", buf[0]);
fclose(ptr_myfile);
return 0;
}
当这个打印时,我得到“第一个字符:”没有其他打印。也许它在终端中无法正常打印?我不确定,非常感谢任何帮助,谢谢
答案 0 :(得分:2)
首先,您需要检查缓冲区中的数据量。 fread
返回长度;如果为零,则访问buf[0]
是不合法的。
并非所有字符都可打印如果您打印的字符代码c
而不是c
本身,您可以看到获得的数据。请使用%d
。
size_t len = fread(buf, 1, 8, ptr_myfile);
if (len != 0) {
printf("First Character: '%c', code %d", buf[0], buf[0]);
} else {
printf("The file has no data\n");
}
答案 1 :(得分:2)
如果它是二进制文件,那么它的内容很可能不会像文本一样打印出来(这是二进制文件的二进制文件)。而不是打印为字符尝试打印为十六进制数字:
#include <stdio.h>
#include <stddef.h>
#include <stdlib.h>
int main()
{
FILE *ptr_myfile;
char buf[8];
ptr_myfile = fopen("packets.1","rb");
if (!ptr_myfile)
{
printf("Unable to open file!");
return 1;
}
size_t rb;
do {
rb = fread(buf, 1, 8, ptr_myfile);
if( rb ) {
size_t i;
for(i = 0; i < rb; ++i) {
printf("%02x", (unsigned int)buf[i]);
}
printf("\n");
}
} while( rb );
fclose(ptr_myfile);
return 0;
}