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.
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.
%s
是打印字符串的格式说明符,但buffer
不是字符串。这会导致未定义的行为。您想要%c
或可能%u
或%x
取决于您想要的输出。
说明%s
符用于字符串,即 a char *
,您传递的是 a char
,这是不一样的。
用于打印:%c
_printf
buffer
printf("%c ", buffer);
因为您将一个字节读入缓冲区并将其视为 printf 中以 0 结尾的字符串。这会将@buffer 处的内存解释为指向 char 的指针(在大多数现代机器上,长度为 4 或 8 个字节),然后打印从该内存地址开始的字节,直到找到 0。
这样你告诉 printf
访问您不拥有的内存是未定义的行为,通常以分段错误为荣。
用 %c 替换 %s .. %c 用于单个字符 %s 用于字符串(超过 1 个字符)