4

Visual C++ 6.0 (プレーン C) で unsigned 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(プリントされていない時計)

そしてl = 123456789012345それは例外ハンドルを与える

助言がありますか?

4

3 に答える 3

9

unsigned __int64Visual C++ 6.0 で値を出力するには、 , not を使用する必要があります( %I64uMSDNのこのページ%lliを参照してください)。Visual Studio 2005 以降のバージョンでのみサポートされています。したがって、コードは次のようになります。%lli

sprintf(buf, "%I64u, %s, %s", l, t1, t2);
于 2008-10-14T11:19:29.373 に答える
1

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

正しい解決策は、「verylongvalue % 10000000000」「(verylongvalue/10000000000) % 10000000000」「verylongvalue/10000000000000000000」のように、数値を 10 桁の 3 つの部分に分解することです。

于 2008-10-14T11:13:52.270 に答える
-1

additionaltextどうやら、必要なchar *(文字列)に割り当てていません。が処理され、コンマlong intがコピーされ、%s生成され(null)た .

于 2008-10-14T10:43:26.420 に答える