我正在尝试将用户输入转换为unsigned short:
int main(int argc, char *argv[])
{
unsigned short tl;
tl = (unsigned short) strtoul(argv[2], NULL, 0);
}
例如:用户输入“555555”溢出并变为31267。
如何在尝试转换输入的同时停止/检查溢出?什么是阻止这种情况发生的最有效和最有效的方法?
非常感谢提前。
答案 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
}