これは機能しません:
unsigned char foo;
foo = 0x123;
sprintf("the unsigned value is:%c",foo);
このエラーが発生します:
パラメータ2を「unsignedchar」から「char」に変換できません
これは機能しません:
unsigned char foo;
foo = 0x123;
sprintf("the unsigned value is:%c",foo);
このエラーが発生します:
パラメータ2を「unsignedchar」から「char」に変換できません
問題の原因となっている unsigned char を調べる前に、次の行をよく見てください。
sprintf("the unsigned value is:%c",foo);
sprintf の最初の引数は常に、値が出力される文字列です。その行は次のようになります。
sprintf(str, "the unsigned value is:%c",foo);
sprintf ではなく printf を意味する場合を除きます。
それを修正した後、フォーマット文字列で %u を使用して、符号なしタイプの値を出力できます。
printf()
formta文字列を使用します%u
:
printf("%u", 'c');
編集
snprintf
もう少し安全です。適切なバッファサイズが使用されていることを確認するのは開発者の責任です。
これを試して :
char p[255]; // example
unsigned char *foo;
...
foo[0] = 0x123;
...
snprintf(p, sizeof(p), " 0x%X ", (unsigned char)foo[0]);
仕組みに混乱していると思いますsprintf
。最初のパラメーターは文字列バッファー、2 番目は書式設定文字列、そして出力する変数です。
sprintf はバッファ オーバーフローを簡単に引き起こす可能性があるため、使用しないでください。
snprintf (Microsoft 標準 C ライブラリを使用してプログラミングする場合は _snprintf) を使用することをお勧めします。ローカル関数でスタックにバッファを割り当てた場合は、次のことができます。
char buffer[SIZE];
snprintf(buffer, sizeof(buffer), "...fmt string...", parameters);
データは切り捨てられる可能性がありますが、バッファをオーバーフローさせるよりは確実に望ましい方法です。