2016-05-19 40 views
0

16進数の1バイトをchar文字列に変換しようとすると、3バイトかかることがわかります。私はVisual Studio 2013を使用しています。16進数の1バイトを文字列に変換する

3バイト未満の場合、「変数 'str'の周りのスタックが壊れています」というエラーが表示されます。

私は間違っていますか?確かに16進数値0xF1はchar str[1]に収まるはずですか? 1バイトの値を割り当てるために3バイトの配列を宣言しなければならないのはなぜですか?

char str[3]; 
sprintf(str, "%02X", 0xF1); 

strの内容は0x0026fd18「F1」である

+4

「F」、「1」、および 'NUL'があります。これは3バイトです。 –

答えて

1

問題は、それがNULL終端に続く文字列に「F1」を印刷しようとしている - これは3バイトになります。これがsprintf関数の全ポイントです。入力を読み込み可能な文字列にフォーマットします。あなたは、単に文字に0xF1の進値を代入しようとしている場合、あなたはこのようにそれを行うだろう:

char str = (char)0xF1

+0

ありがとう、それは今、多くの意味があります! – Hefaestion

+0

うれしい私は助けることができました!あなたがそれに満足すれば私の答えを受け入れることを覚えておいてください。 –

関連する問題