我正在尝试将一堆文件读入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),这似乎只能读取文件的前几个字节。这里有什么我想念的吗?
答案 0 :(得分:0)
如果你查看definintion of fread,那么你的fread不可能仅返回前几个字节,因为你把len放入size字段并传递计数1.这意味着fread将返回1成功读取len个字节,否则读取无字节将失败。如果你交换参数,那么fread将读取尽可能多的字节,并将返回它实际读取的字节数(成功时应该是len)。
另请注意,执行memset 0然后进行freading是低效的,除非您要求数组在失败时归零(错误情况应该意味着您不必)。添加空终止符(与普通文件一样)的更好方法是:
content[len] = '\0';