署名のないcharをsprintする方法は?
-
20-09-2019 - |
質問
これはうまくいきません:
unsigned char foo;
foo = 0x123;
sprintf("the unsigned value is:%c",foo);
このエラーが発生します:
パラメーター2を「unsigned char」から「char」に変換することはできません
解決
使用する printf()
formta string's %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番目はフォーマット文字列で、次に出力する変数です。
Buffer Overflowを簡単に引き起こす可能性があるため、Sprintfを使用しないでください。
Microsoft Standard Cライブラリを使用してプログラミングするときは、snprintf(または_snprintf)をお勧めします。ローカル関数のスタックにバッファーを割り当てた場合は、次のことができます。
char buffer[SIZE];
snprintf(buffer, sizeof(buffer), "...fmt string...", parameters);
データは切り捨てられる可能性がありますが、それはバッファーをオーバーフローするよりも間違いなく望ましいです。
所属していません StackOverflow