2011-12-16 8 views
-3

は、このコードの行では何が起こったことになります。奇妙scanfの引数

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

それは2行を読み込み、それが二行目をigonreますなぜ?

それは私に私がscanf referenceを参照してください

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

"Strange" how ?? 「2つの行と2つ目の行を読みます」何? –

答えて

5

を使用し、出力として、最初の行なります:[タイプ]はscanf関数があるタイプにアスタリスクプレフィックス(すなわち「%* [タイプ]」形式の文字列を、タイプ指定子、たとえばdまたはs)は、読み取られた値が無視されることを意味します。だから '?'パラメータは実際には "placeholder"として存在し、scanfが2つの値を読み取ることを示します。

質問( "%*")に示されている形式の文字列は無効です(型指定子がありません)。これは、呼び出された呼び出しが未定義の動作になることを意味します。

+0

'%*'は完全な書式指定子ではありません(無視する変換の型には文字がありません。たとえば 's'など)。したがって、' scanf'の呼び出しは無効です。そして、これが私のdownvoteの理由です。他の有権者:事実確認! – u0b34a0f6ae