2016-10-22 5 views
-2
int main() 
    { 

     printf("Hello World!");   
     printf("%s");//printing Hello World again why? 

    } 

このコードは "Hello World!"二度。なぜこのように起こっているのですか?C:引数として文字列形式のprintf

+2

私はあなたが 'のprintf( "%sの")を意味推測;' –

+0

未定義の動作。この場合、過去からのもの(文字列へのポインタ)は、決して与えられなかった引数を期待している関数呼び出しで現在使用されています。その質問に答えることは本当の目的ではありません。 – enhzflep

+0

未定義の動作が発生しているためです。あなたは、悪いコードを書くことによってメモリの内容を取得している。あなたが何か完全に間違っていると、説明できない結果が出たときに驚くことはありません。 –

答えて

3

printf("%s")は、未定義の動作を引き起こします。

、あなたのプログラムの中でその行を持っていたら、あなたの全体のプログラムは未定義になり、やるか何かを行うことができます。

ほとんどの機能が正常に実行することができるので、完全な運で、あなたのスタックがまだ前の呼び出しから文字列リテラルへのポインタが含まれています。

+1

"*〜によって完全[悪い]運* ..." – alk

関連する問題