これは機能しません:
unsigned char foo;
foo = 0x123;
sprintf("the unsigned value is:%c",foo);
私はこのエラーを受け取ります:
パラメータ2を「unsigned char」から「char」に変換できません
printf()
形式の文字列%u
を使用:
printf("%u", 'c');
問題の原因となる署名されていない文字を調べる前に、次の行をよく見てください。
sprintf("the unsigned value is:%c",foo);
Sprintfの最初の引数は常に値が出力される文字列です。その行は次のようになります。
sprintf(str, "the unsigned value is:%c",foo);
Sprintfの代わりにprintfを意味する場合を除きます。
それを修正した後、フォーマット文字列で%uを使用して、符号なし型の値を出力できます。
[〜#〜]編集[〜#〜]
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);
データは切り捨てられる可能性がありますが、バッファをオーバーフローさせるよりも確実に望ましい方法です。