2014-11-24 92 views
-1

我試圖打開一個圖像並將其複製到一個數組中。但是,如果我試圖打印數組,只有圖像的字節存儲在「?」被打印。它不是應該在rb中打開嗎?繼承人的代碼:無法打開圖像C

char* nomefich = "cloud.png"; 
FILE *fi = fopen(nomefich,"rb"); 
buf = malloc(size); //size represents the size of file (I used struct stat to obtain that) 
fread(buf,size,1,fi); 
fclose(fi); 
+2

你說打印數組,但沒有顯示代碼 – 2014-11-24 11:22:12

+3

當寫入二進制數據到終端時,你的終端將無法解釋所有符號,所以行爲是正常的。 – 2014-11-24 11:22:22

回答

1

如果你要打印的二進制文件,你需要爲十六進制值

例如寫入值的內容

for (i = 0; i < size; ++i) 
{ 
    printf("%2X ", buf[i]); 
    if (i != 0 && (i % 16) == 0) 
    { 
    putchar('\n'); 
    } 
} 
+0

'(i%0)'是什麼?我認爲它是UB。 – 2014-11-24 11:37:04

+0

@AshwaniDausodia謝謝,是一個錯字! – 2014-11-25 06:29:04

0

該文件應打開讀取二進制模式 - 因此rb。只有可打印的字符纔會打印,並且如果您嘗試打印爲字符串,則只有在達到二進制零'\ 0'字符時纔打印。

如果你想確保文件被讀取,你可以打印簽名字符,你可以在這裏找到http://www.libpng.org/pub/png/spec/1.2/PNG-Structure.html。我會打印這些整數。