C fread无法获取整个文件

C fread无法获取整个文件,c,fread,C,Fread,我试图读取二进制文件并将内容存储到一个字符数组中。此函数对于文本文件非常有效,但对于非文本文件(例如PNG文件),它并没有按预期工作。下面是代码和结果。怎么了 代码: 如果我以文本模式打开文件,我会期望得到这些结果,但由于它是以二进制模式打开的,我不明白为什么会发生这种情况。strlen函数专门用于C样式的字符串。无法通过查看任意二进制数据的内容来判断其长度。长度在lengthRead中 fprintf(stderr, "Content read:\r\n%s\r\n",

我试图读取二进制文件并将内容存储到一个字符数组中。此函数对于文本文件非常有效,但对于非文本文件(例如PNG文件),它并没有按预期工作。下面是代码和结果。怎么了

代码:


如果我以文本模式打开文件,我会期望得到这些结果,但由于它是以二进制模式打开的,我不明白为什么会发生这种情况。

strlen函数专门用于C样式的字符串。无法通过查看任意二进制数据的内容来判断其长度。长度在
lengthRead

            fprintf(stderr, "Content read:\r\n%s\r\n", *contents);

这里也有同样的问题。
%s
格式说明符用于C样式字符串,而不是任意二进制数据。您需要编写自己的函数以适当的格式打印数据。

该文件包含二进制值,如“\0”。您的strlen()计算到第一个数值。wildplasser是正确的。您正在尝试像ascii一样读入二进制文件并像ascii一样打印出来。你不能那样做。您需要了解如何读取二进制文件,然后了解如何对二进制文件进行编码以便打印输出。好的,这很有意义。我将阅读更多关于如何读/写二进制数据的内容。谢谢。好的,我知道我需要修改。谢谢你给我指明了正确的方向。
devious@devious-kubuntu:~/Workspace/test$ ls                                                                                                                                                                                                                                   
test  test.c  test.png  test.txt
devious@devious-kubuntu:~/Workspace/test$ ./test test.txt 
File length: 43
File contents:
This is a test file!

With multiple lines!

devious@devious-kubuntu:~/Workspace/test$ ./test test.png 
Fatal Error: File read error (file: test.png)!
Characters expected: 50243, Characters read: 8
Content read:
?PNG
¦

Aborting!
            fprintf(stderr, "Content read:\r\n%s\r\n", *contents);