4

次のコードがあります。

char buf[255];
int ID = 0;
double val = 1.234;
sprintf(buf, "%d@%.3lf", ID, val);
printf("%s", buf);

printf()値を正しく出力しIDますが、val値はゴミです。この問題の原因を知っていますか? Win7 32 ビットで MSVC 9 を使用しています。さらに奇妙なことに、上記のコードは 64 ビット マシンで正しく動作します。

助けてくれてありがとう。

4

1 に答える 1

2

このコメントの後:

はい、追加のコードがあります。このコードは DLL ライブラリにコンパイルされます。実際には、質問に投稿されたコードを呼び出す場所が 3 か所あり、説明されているように、出力ガベージの 1 か所にしかありません。

これはおそらく、コードの別の場所に問題があるためです。おそらくどこかでスタック/ヒープが壊れていて、意図せずに変数を上書きしています。メモリ チェッカー (valgrind (unix)、CMemLeak (すべて)) でコードをチェックします。

于 2012-09-25T13:14:50.583 に答える