如何检查溢出将字符*[]转换为无符号短短
How to check for overflow converting char*[] to unsigned short
我正在尝试将用户输入转换为无符号的短:
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。
您应该能够通过检查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
}
相关文章:
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- C++中无符号字符溢出
- 使用无符号字符数组有效存储内存
- 在 std::无符号字符的向量处存储 int 的十六进制表示形式
- 如何在保持其值的同时将 c++ 无符号字符变量转换为 char 变量
- 从 std::vector<无符号字符>切片中提取 int?
- 将无符号字符的向量存储在数组中会给我 std::bad_alloc
- 使用 fopen 打开 .pak 文件并使该文件应用于 const 无符号字符* (C++)
- 库特无符号字符
- 寻找一种更好的方法来表示无符号字符数组
- C++ 无符号字符 *{varName};-> C#
- 如何返回/复制unique_ptr<无符号字符[]>的值?
- 将浮点数转换为无符号字符数组并打印出来
- 在函数中返回无符号字符数组,但不返回指针
- 如何在 C/C++ 中将无符号字符*转换为无符号字符数组?
- 如何返回实际值(在我的例子中是无符号字符数组)而不是来自 C++ 函数的指针?
- 如何将带有十六进制值的 std::string 转换为 std::vector<无符号字符>
- 无符号字符打印其 ASCII 值
- 字符数组到无符号字符 *
- 是否可以在 c++ 中将两位数保存在无符号字符中