2014-11-24 158 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。我会打印这些整数。