私はボリュームを追跡するために使用する符号なしlong longを持っています。ボリュームは、別の符号なしlong longで増分されます。 5秒ごとにこの値が出力され、値が32ビットの符号なしの最大値に達すると、printfは私に負の値を与えます。コードスニペットは、次のとおりです。その後整数オーバーフロー
unsigned long long vol, vold;
char voltemp[10];
vold = 0;
...私が間違って
while (TRUE) {
vol = atoi(voltemp);
vold += vol;
fprintf(fd2, "volume = %llu);
}
何をしているのですか?これは、RedHatの4 2.6.9-78.0.5.ELsmp gccのバージョンの下で実行3.4.5
fprintf行に3番目のパラメータがありませんが、誤ってコピーした可能性があります。@Charlieちょうどそれを追加しないでください。私たちが探している問題かもしれません。 @JPM現在のコードは入手したコードですか? vol = 1に設定したときに問題を再現できますか? atoiを使う代わりに? – phihag
彼はそれが負の数をプリントしていると言えば、それは間違ったprintfでなければならないと思う。もしそれが間違っていなければ、%lluは正の数(何かが別の関心事であれ)を出力し、負の数値は出力しません。 –
さて、printfは間違っているかもしれませんが(miscopiedではなく)、atoiもそうです。 –