我正在尝试将jpeg文件读入char *缓冲区,以便我可以将缓冲区打印为文本。我的问题是我只读第一行。这是我的代码:
FILE* file = fopen(filePath, "r");
fseek(file, 0, SEEK_END);
unsigned long fileLen=ftell(file);
fseek(file, 0, SEEK_SET);
char* file_data;
file_data=(char *)malloc((fileLen+1)*sizeof(char));
while (!feof(file)) {
fread(file_data, fileLen, 1, file);
}
fclose(file);
printf("%s\n", file_data);
有什么想法吗?
答案 0 :(得分:1)
您需要以二进制模式打开文件" rb"。
如上所述,执行二进制jpeg数据的printf将不会产生有用的结果。
答案 1 :(得分:0)
sizeof(char)
是1
。malloc
的返回值。feof()
作为循环条件几乎总是错误的。请检查并使用fread
的结果。%s
进行打印将无效 - 例如,使用%02x
编写循环并打印每个字节。答案 2 :(得分:0)
你真正想要的是这个
FILE* file = fopen(filePath, "rb");
fseek(file, 0, SEEK_END);
unsigned long fileLen=ftell(file);
char* file_data;
rewind(file);
file_data=malloc((fileLen)*sizeof(char));
if (file_data == NULL){
printf("Memory error"); exit (2);
}
int num_read=0;
char s;
while ((num_read = fread(&s, 1, 1, file))) {
strncat(file_data,&s,1);
}
printf("file contents: %s", file_data);
fclose(file);