如何检查溢出将字符*[]转换为无符号短短

How to check for overflow converting char*[] to unsigned short

本文关键字:无符号 字符 转换 何检查 检查 溢出      更新时间:2023-10-16

我正在尝试将用户输入转换为无符号的短:

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

例如:"555555"的用户输入溢出并变为 31267。

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

提前非常感谢。

如果你在 cppreference.com 上查看strtoul的文档

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

您应该能够通过检查errnoERANGE来检测到这一点。

因此,这样的东西应该适合您:

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