众所周知,如果发生溢出,strtoXX函数会返回最大值(或最小值),例如strtoul("999999999999999999999999999999999", NULL, 0)
返回ULONG_MAX
。但strtoul("0xffffffff", NULL, 0)
也返回ULONG_MAX
(如果sizeof(unsigned long)== 4)。
然后,我该如何检查溢出?
答案 0 :(得分:4)
http://www.cplusplus.com/reference/cstdlib/strtoul/
如果读取的值超出a的可表示值范围 unsigned long int,该函数返回ULONG_MAX(在中定义) ),并且errno设置为ERANGE。
你正在处理无符号整数,所以你的整数有什么符号并不重要:它们都被视为无符号整数。并且0xFF FF FF FF(假设您正在做4个字节)是负数,但它被视为+4294967295(不是2的补码)。在这种情况下,这也正是ULONG_MAX
的价值。