2015-02-11 207 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);