2011-12-16 91 views
-3

什么将在此行代码即可发生:奇怪scanf函数参数

char Message[10]; 
scanf("%s%*",&Message,'?'); 

为什么它会读取两行,然后它会igonre第二行?

它给我第一线作为输出当我使用

`printf("%s",Message)` 
+1

“奇怪”怎么样? “它读两行,igonre [原文如此]第二个”?什么? – 2011-12-16 14:07:49

回答

5

参见scanf reference:星号前缀的类型(即,“%* [类型]”格式的字符串,其中[类型]是一个scanf的类型说明符,例如ds)表示读取的值将被忽略;所以 '?'参数实际上就是作为“占位符”出现的,表示scanf将读取两个值。

然而,问题(“%*”)中显示的格式字符串无效(缺少类型说明符),这意味着显示的调用将导致未定义的行为。

+0

`%*`不是一个完整的格式说明符(缺少忽略类型转换的字母,例如`s`),所以对`scanf`的整个调用都是无效的。这是我倒下的原因。其他选民:事实核查! – u0b34a0f6ae 2011-12-16 23:35:01