如何检查溢出转换char * []到unsigned short

时间:2017-07-27 14:44:16

标签: c++

我正在尝试将用户输入转换为unsigned short:

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

例如:用户输入“555555”溢出并变为31267。

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

非常感谢提前。

1 个答案:

答案 0 :(得分:5)

如果您查看strtoul on cppreference.com

的文档
  

如果转换后的值超出相应返回类型的范围,则会发生范围错误并返回ULONG_MAX或ULLONG_MAX。

您应该可以通过errno ERANGE检查{<1}}来检测到这一点。

这样的事情应该适合你:

#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
}