用scanf读取小int

Imp*_*Imp 1 c scanf

有没有办法读取一个小的int(即范围-128..127的1字节int)使用scanf?考虑以下代码:

char x;
scanf("%d", &x);
Run Code Online (Sandbox Code Playgroud)

程序将读取一个int,最可能是4个字节,并尝试将其写入x的地址,从而违反了该地址后存储器中的3个字节.

我知道有一个短的int(%h)的修饰符,但我还没有听说过一个小的int(char)?

Max*_*kin 6

scanf需要"%hhd"格式化字符串才能读入char.

  • 它至少在C99. (4认同)