2017-10-06 13 views
-3
#include<stdio.h> 
void main() 
{ 
printf(5+"good morning");/*need explanation for this line 
return 0; 
} 

プログラムの出力は - 朝 どのように説明できますか?次のプログラムの出力の説明

+0

Cへようこそ、私たちはここで難読化しています。次に、これが何をするのかを説明しよう: 'printf((char * const const const const)?<&5 ??(" good morning ":>%>);' – Lundin

答えて

0

プログラムの出力がある - 朝

printf(5+"good morning"); 

は最初の5つの文字をoverpassing " "内の文字列を出力します。したがって、最初の4文字はg,o,o,d、スペースは5番目の文字が上書きされ、残りの文字列が印刷されます。ここprintf

int printf(const char *format, ...); 

format

1

プロトタイプは、リテラル文字列の最初のエレメントのアドレスにconst char*のタイプとポイントです。 printf5+"Good morning"を渡すと、実際に渡されているのは文字列のメモリアドレス+ 5です。プラス5は、印刷が文字列の開始を超えて5charsを開始し、単語「Good」の後の空白がcharとしてカウントされることを意味します。

1

5+"good morning"でコールすると、パラメータがポインタに変換されます。つまり、実行可能ファイルのどこかに文字列定数"good morning"が格納されており、コンパイラはそのポインタを渡します。このような何か:

const char txt[]="good morning\0"; 
printf(5+txt); 

のでprintfは、(1つのcharは8ビットWORDのアドレス指定のマシン上の単一BYTEと単一のメモリアドレスのように)文字列の最初の5つの文字をバイパスし、評価ポインタtxt+5を取得します。

0

Printf()方法は、()

それが印刷

のみ「朝」のテキストを印刷するために使用され、5+「G」「O」「O」「D」と初期5つの文字を迂回しました""(スペース)

関連する問題