我在C语言中有一个简单的函数,可以计算两个给定日期之间的天数。
当两个日期都有效时,它会很好地工作。 如果日期无效,则将日期设置为“ 0/0/0”。
这是我的for
循环之一:
for(int i = 0; i < date2.month - 1; i++)
d2Days += monthDays[i];
如果日期无效,则date2.month
等于0,并且循环根本不会重复,但是循环会重复,并且会无限期地进行下去,直到i
超过数组的大小并且会断断续续。
即使月份= 0,您也可以看到i
= 13
有人可以解释为什么这样的行为吗?
答案 0 :(得分:0)
我认为@pmg在上面的评论中添加了它。如果您的date2.month
成员是无符号的,则将其设置为零时,在循环中将其递减1会导致整数溢出并返回INT_MAX
。发生这种情况时,您的循环条件将评估为true,直到您超出monthDays