我有一个 unsigned long long 用于跟踪交易量。卷增加另一个 unsigned 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 下运行
最佳答案
既然你说它打印了一个负值,那么除了你使用 atoi
而不是 strtoull
之外,肯定还有其他问题。 %llu
格式说明符只是不打印负值。
看起来问题很明显出在 fprintf
调用上。检查您是否包含了 stdio.h
并且参数列表确实是源代码中的内容。
关于c - 整数溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/837215/