Ich habe eine lange nicht signiert, die ich verwende, um die Lautstärke zu verfolgen. Der Datenträger wird um einen weiteren unsigned long long erhöht. Alle 5 Sekunden drucke ich diesen Wert aus und wenn der Wert das vorzeichenlose Maximum von 32 Bit erreicht, gibt der printf mir einen negativen Wert. Das Code-Snippet folgt:Integer Overflow
unsigned long long vol, vold;
char voltemp[10];
vold = 0;
später ...
while (TRUE) {
vol = atoi(voltemp);
vold += vol;
fprintf(fd2, "volume = %llu);
}
Was mache ich falsch? Dies läuft unter RedHat 4 2.6.9-78.0.5.ELsmp gcc Version 3.4.5
Die fprintf-Zeile fehlt ein dritter Parameter, aber Sie haben das wahrscheinlich falsch [email protected] Bitte füge das nicht einfach hinzu. Es könnte das Problem sein, nach dem wir suchen. @JPM Ist der aktuelle Code der, den du bekommen hast? Können Sie das Problem reproduzieren, wenn Sie vol = 1 setzen? anstatt Atoi zu benutzen? – phihag
Da er sagt, dass es eine negative Zahl druckt, vermute ich, dass es das printf sein muss, das falsch ist. Wenn es nicht falsch wäre, würde% llu eine positive Zahl (was auch immer das ist ein anderes Anliegen) und keine negative Zahl. –
Nun, der printf kann falsch sein (im Gegensatz zu miscopied), aber auch atoi. –