2012-02-28 88 views
0

是否有方法使用scanf来读取小int(即范围为-128..127的1字节int)?考虑以下代码:使用scanf读取小int int

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

该程序将读取一个int,最有可能的4个字节,并尝试将其在X的地址写,从而违反了3个字节来在该地址后的内存。

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

+0

什么语言?究竟? C和C++是不同的,并且都有变体。 – 2012-02-28 20:31:14

+0

可能重复[scanf(“%d”,char *) - char-as-int格式字符串?](http://stackoverflow.com/questions/3036396/scanfd-char-char-as-int-format-字符串)或[ANSI C(ISO C90):可以scanf读取/接受一个无符号字符?](http://stackoverflow.com/questions/2231056/ansi-c-iso-c90-can-scanf-read-accept- an-unsigned-char) – 2012-02-28 20:32:33

+0

哎呀,很好,我打算删除'C++'标记。 – Puppy 2012-02-28 20:37:00

回答

6

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

+0

我不认为这是标准的,是吗? – 2012-02-28 20:31:05

+4

至少在C99中。 – 2012-02-28 20:32:06

+1

你是对的(7.19.6.2.11) – 2012-02-28 20:33:47