2017-07-27 55 views
3

我想用户输入转换成无符号短:如何检查溢出转换的char * []为无符号短

int main(int argc, char *argv[]) 
{ 
    unsigned short tl; 
    tl = (unsigned short) strtoul(argv[2], NULL, 0); 
} 

比如:“555555”溢出用户输入并成为31267。

如何在尝试转换输入时停止/检查溢出?什么是阻止这种情况发生的最有效和最有效的方法?

非常感谢提前。

回答

5

如果你看看strtoul on cppreference.com

文档如果转换值掉下来的相应的返回类型的范围,发生范围错误并返回ULONG_MAX或ULLONG_MAX。

您应该能够通过检查errno来检测ERANGE

像这样的东西应该为你工作,因此:

#include <limits> 
#include <cerror> 

auto n = strtoul(argv[2], NULL, 0); 
if (errno == ERANGE || n > std::numeric_limits<unsigned short>::max()) { 
    // Handle overflow 
} 
else { 
    // Do something 
}