質問

Visual C ++ 6.0(プレーンC)で符号なしlong long値をsprintf()したい。

char buf[1000]; //bad coding 
unsigned __int64 l = 12345678; 
char t1[6] = "test1"; 
char t2[6] = "test2"; 
sprintf(buf, "%lli, %s, %s", l, t1, t2);

結果を与える

12345678, (null), test1

test2が印刷されないことに注意してください)

and l = 123456789012345例外ハンドルを提供します

提案はありますか

役に立ちましたか?

解決

Visual C ++ 6.0でunsigned __int64値を印刷するには、%I64uではなく%lliを使用する必要があります( MSDNのこのページ)。 <=>は、Visual Studio 2005以降のバージョンでのみサポートされています。 したがって、コードは次のようになります。

sprintf(buf, "%I64u, %s, %s", l, t1, t2);

他のヒント

printfは、省略記号を使用して変数の引数リストを渡します。表示される(null)はlong longの2番目の部分で、たまたますべて0ビットです。 1 <!> lt; <!> lt; 60 + 1 <!> lt; <!> lt; 30に設定すると、1 <!> lt; <!> lt; 60パーツとしてクラッシュします。 char *として解釈されます。

正しい解決策は、数値を10桁の3つの部分に分割することです。<!> quot; verylongvalue%10000000000 <!> quot; <!> quot;(verylongvalue / 10000000000)%10000000000 <!> quot; <!> quot; verylongvalue / 100000000000000000000 <!> quot;。

どうやら、必要なadditionaltext(文字列)にchar *を割り当てなかったようです。 long intが処理され、コンマがコピーされ、%sのみが(null)を生成したことに注意してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top