16

これは機能しません:

unsigned char foo;
foo = 0x123;

sprintf("the unsigned value is:%c",foo);

このエラーが発生します:

パラメータ2を「unsignedchar」から「char」に変換できません

4

5 に答える 5

35

問題の原因となっている unsigned char を調べる前に、次の行をよく見てください。

sprintf("the unsigned value is:%c",foo);

sprintf の最初の引数は常に、値が出力される文字列です。その行は次のようになります。

sprintf(str, "the unsigned value is:%c",foo);

sprintf ではなく printf を意味する場合を除きます。

それを修正した後、フォーマット文字列で %u を使用して、符号なしタイプの値を出力できます。

于 2010-01-12T16:29:18.907 に答える
21

printf()formta文字列を使用します%u

printf("%u", 'c');
于 2010-01-12T16:23:07.163 に答える
6

編集

snprintfもう少し安全です。適切なバッファサイズが使用されていることを確認するのは開発者の責任です。

これを試して :

char p[255]; // example
unsigned char *foo;
...
foo[0] = 0x123;
...
snprintf(p, sizeof(p), " 0x%X ", (unsigned char)foo[0]);
于 2010-01-12T16:21:55.433 に答える
3

仕組みに混乱していると思いますsprintf。最初のパラメーターは文字列バッファー、2 番目は書式設定文字列、そして出力する変数です。

于 2010-01-12T16:25:15.490 に答える
1

sprintf はバッファ オーバーフローを簡単に引き起こす可能性があるため、使用しないでください。

snprintf (Microsoft 標準 C ライブラリを使用してプログラミングする場合は _snprintf) を使用することをお勧めします。ローカル関数でスタックにバッファを割り当てた場合は、次のことができます。

char buffer[SIZE];
snprintf(buffer, sizeof(buffer), "...fmt string...", parameters);

データは切り捨てられる可能性がありますが、バッファをオーバーフローさせるよりは確実に望ましい方法です。

于 2010-01-12T17:54:43.483 に答える