用scanf读取小int

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

 char x; scanf("%d", &x); 

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

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

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