什么将在此行代码即可发生:奇怪scanf函数参数
char Message[10];
scanf("%s%*",&Message,'?');
为什么它会读取两行,然后它会igonre第二行?
它给我第一线作为输出当我使用
`printf("%s",Message)`
什么将在此行代码即可发生:奇怪scanf函数参数
char Message[10];
scanf("%s%*",&Message,'?');
为什么它会读取两行,然后它会igonre第二行?
它给我第一线作为输出当我使用
`printf("%s",Message)`
参见scanf reference:星号前缀的类型(即,“%* [类型]”格式的字符串,其中[类型]是一个scanf的类型说明符,例如d
或s
)表示读取的值将被忽略;所以 '?'参数实际上就是作为“占位符”出现的,表示scanf
将读取两个值。
然而,问题(“%*”)中显示的格式字符串无效(缺少类型说明符),这意味着显示的调用将导致未定义的行为。
`%*`不是一个完整的格式说明符(缺少忽略类型转换的字母,例如`s`),所以对`scanf`的整个调用都是无效的。这是我倒下的原因。其他选民:事实核查! – u0b34a0f6ae 2011-12-16 23:35:01
“奇怪”怎么样? “它读两行,igonre [原文如此]第二个”?什么? – 2011-12-16 14:07:49