我在C中读取二进制文件时遇到问题,问题是:当我读取文件时,它不会读取完整的文件但是留下了一些最后的数据... 用于读取文件的代码如下:
FILE *file;
unsigned long fileLen;
//Open file
file = fopen("ASELogo.png", "rb");
if (!file)
{
fprintf(stderr, "Unable to open file %s", name);
}
fseek(file, 0, SEEK_END);
fileLen=ftell(file);
fseek(file, 0, SEEK_SET);
buffer=(char *)malloc((fileLen+1)*sizeof(unsigned char));
fread(buffer, fileLen, 1, file);
for(int i = 0;i < fileLen;++i)
printf("%c", ((char *)buffer)[i]);
当打印文件时,它不会打印文件的全部内容......
实际文件内容为:
APNG
答案 0 :(得分:3)
您将字节打印为字符。如果它们恰好是ASCII范围,那就没问题,但是你最终会打印控制字符等等。
尝试将字符格式化为字节(例如0xFF和0x12),看看是否有帮助。
答案 1 :(得分:0)
你没有提到你读了多少,文件有多大,但这可能与你将 signed int (i)与 unsigned long (fileLen)如果文件足够大,你就会遇到麻烦。
顺便说一句,您分配给char *
,但使用无符号字符的大小。那是为什么?
修改强>
还有一件事:你没有检查fread
的返回值。检查是否已读取预期的字节数,如果没有,请检查perror。请参阅here。