strtoXX:检查溢出

时间:2014-02-23 10:50:18

标签: c

众所周知,如果发生溢出,strtoXX函数会返回最大值(或最小值),例如strtoul("999999999999999999999999999999999", NULL, 0)返回ULONG_MAX。但strtoul("0xffffffff", NULL, 0)也返回ULONG_MAX(如果sizeof(unsigned long)== 4)。

然后,我该如何检查溢出?

1 个答案:

答案 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的价值。