【发布时间】:2011-08-17 04:33:15
【问题描述】:
我正在尝试将一堆文件读入一个 char 数组, 我有以下代码
FILE* file = fopen("...","rb");
//some error checking stuff
fseek(file, 0, SEEK_END);
long len=ftell(file);
fseek(file, 0, SEEK_SET);
char* content=(char *)malloc(len+1);
memset(content,0,len+1);
fread(content, len, 1, file);
我用一个文本文件对此进行了测试,这似乎可行。我在我的数组中获得了文件的内容,一切都很好。但是如果这段代码使用图像文件运行(我测试了 pngs 和 jpegs),这似乎只读取了文件的前几个字节。我这里有什么遗漏吗?
【问题讨论】:
-
你如何验证读取了多少字节?
-
您是否尝试执行 printf 来确定只显示前几个字节?
-
@Niraj 这是一个 CGI 应用程序吗?如果是这样,您必须在数据输出开始时在标头中发送正确的 MIME 类型;
Content-type:image/png在 png 数据的情况下。 -
您如何将字节发送回浏览器?
fprintf还是fwrite?如果您只是要填充缓冲区并且不需要malloc上的演员表,则无需memset。此外,您不需要在用作字节缓冲区的char*(实际上应该是unsigned char *)上使用空终止符,这仅对字符串需要。为什么不使用stat或fstat而不是四处寻找某物有多大? -
@mu
fseek()很好,它是标准的 ANSI C,而fstat或stat不是。 @Nirajfseek(file, 0, SEEK_SET);可以替换为rewind(file);,这可能更详细、更清晰。