2015-02-11 128 views
0

我试图读取一个jpeg文件到char *缓冲区,以便我可以将文本缓冲区打印出来。我的问题是,我只是读第一行。这是我的代码:阅读jpeg文件char *缓冲区c

 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. sizeof(char)1
  2. 您不需要在C程序中输入返回值malloc
  3. 使用feof()作为循环条件几乎总是错误的。请检查并使用fread的结果。
  4. 二进制文件的数据不可能是C字符串。例如,使用%s打印它将不起作用 - 写入循环并使用%02x打印每个字节。
+0

他也应该以二进制模式('“RB”')来打开文件,除非他想字节为(看似)随机删除或更改了某些系统。 – 2015-02-11 19:24:43

+0

那么我需要malloc吗? – CatLord 2015-02-11 19:26:54

+0

@CatLord,你可以,但你不需要。如果你愿意,你可以一次只读一个字节。 – 2015-02-11 19:31:49

1

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

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

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);