有些人请告诉我为什么这段代码会导致这样的错误?
unsigned char buffer;
fread(&buffer,1,1,image_ptr);
printf("%s ",buffer);
图像为8位灰度。谢谢。
答案 0 :(得分:5)
%s
是打印字符串的格式说明符,但buffer
不是字符串。这会导致未定义的行为。您需要%c
或%u
或%x
,具体取决于您想要的输出。
答案 1 :(得分:5)
%s
说明符用于字符串,即char *
,您传递char
,这是不一样的。
使用%c
中的printf
打印buffer
:
printf("%c ", buffer);
答案 2 :(得分:3)
因为您将一个字节读入缓冲区并将其视为printf中以0结尾的字符串。这将把@buffer中的内存解释为char的指针(在大多数现代机器4或8字节长),然后从该内存地址开始打印字节,直到找到0。
这样你告诉printf
访问您不拥有的内存是未定义的行为,通常会受到分段错误的影响。
答案 3 :(得分:1)
用%c替换%s .. %c用于单个字符 %s用于字符串(超过1个字符)