2012-03-17 25 views
-1

私は次のコードを持っていますが、私は%0x%xが次のコードの意味をよく知りませんか?C/C++プログラミングで%0x%xは何を意味しますか?

sprintf(buf, "pixel : %0x%x \n", gpbImageData[100]); 
OutputDebugString(buf); 

gpbImageData[100]メモリ内の画像データを指しています。

+1

引数が実際にポインタの場合は、 '%p'を使用している必要があります。 –

+0

http://www.cplusplus.com/reference/clibrary/cstdio/printf/をご覧ください。さらに質問がある場合は、尋ねてください。 –

+0

+1 @OliCharlesworth。しかし、その変数の名前から 'gpbImageData'がポインタであることを賭けています。 –

答えて

7

あなたは確かに"0x%x"

sprintf(buf, "pixel : 0x%x \n", gpbImageData[100]); 

このフォーマット文字列を意味し、彼らはbufで書かれているとき、これは16進数に0x接頭辞を追加します。あなたはフラグ文字#と同じことを達成することができます

注:

sprintf(buf, "pixel : %#x \n", gpbImageData[100]); 
+0

ありがとうございます:) – user261002

12

この例では、未定義の動作が発生します。 - 進数として値を印刷

%0x 
%x 

これらの両方が正確に同じことを意味:フォーマット文字列はsprint 2つのint値を期待するようになります。しかし、あなたが示した呼び出しは1つの引数しか渡しません。

0x%xとは言いませんか?もしそうでなければ、それはおそらく...普通であると考えられ、渡された値を接頭辞0xの16進数として出力します。

あなたのコードは、警告が表示されるはずです。 clangは与える:

example.c:5:15: warning: more '%' conversions than data arguments [-Wformat] 
    printf("%0x%x\n", 125987); 
      ~^ 
1 warning generated. 

gccは言う:まったくのフラグを設けず

example.c: In function ‘main’: 
example.c:5: warning: too few arguments for format 
example.c:5: warning: too few arguments for format 

両方。

2

正しいフォーマットがouahとして「0xを%X」であるとカールNorumが言いました。どのgpbImageData [100]の内容(ポインタまたは数値)でも、%xはその値を16進数で表示します。 0xは単なるテキストです。たぶん "gpbImageData"はポインタの配列です。

関連する問題