将jpeg文件读取到char * buffer c

时间:2015-02-11 19:15:25

标签: c buffer jpeg

我正在尝试将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);

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

您需要以二进制模式打开文件" rb"。

如上所述,执行二进制jpeg数据的printf将不会产生有用的结果。

答案 1 :(得分:0)

  1. sizeof(char)1
  2. 您无需在C程序中转换malloc的返回值。
  3. 使用feof()作为循环条件几乎总是错误的。请检查并使用fread的结果。
  4. 二进制文件的数据不太可能是C字符串。使用%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);