0

Would some please tell me why this code leads to such an error?

unsigned char buffer;
fread(&buffer,1,1,image_ptr);
printf("%s ",buffer);

The image is 8-bit grayscale. Thank you.

4

4 回答 4

5

%s是打印字符串的格式说明符,但buffer不是字符串。这会导致未定义的行为。您想要%c或可能%u%x取决于您想要的输出。

于 2013-06-28T20:46:56.187 回答
5

说明%s符用于字符串,即 a char *,您传递的是 a char,这是不一样的。

用于打印:%c_printfbuffer

printf("%c ", buffer);
于 2013-06-28T20:47:05.667 回答
3

因为您将一个字节读入缓冲区并将其视为 printf 中以 0 结尾的字符串。这会将@buffer 处的内存解释为指向 char 的指针(在大多数现代机器上,长度为 4 或 8 个字节),然后打印从该内存地址开始的字节,直到找到 0。

这样你告诉 printf

  • 首先读取变量缓冲区后面的 3-7 个字节
  • 以及从完全随机的内存地址中读取的字节

访问您不拥有的内存是未定义的行为,通常以分段错误为荣。

于 2013-06-28T20:50:12.250 回答
1

用 %c 替换 %s .. %c 用于单个字符 %s 用于字符串(超过 1 个字符)

于 2013-06-28T20:49:14.043 回答