- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
<分区>
我一直在尝试使用 strtol
将 char 数组正确转换为 long,检查是否存在上溢或下溢,然后对 long 进行 int 转换。一路上,我注意到很多代码看起来像这样
if ((result == LONG_MAX || result == LONG_MIN) && errno == ERANGE)
{
// Handle the error
}
为什么不能直接说
if(errno == ERANGE)
{
// Handle the error
}
据我了解,如果发生下溢或上溢,在这两种情况下,errno 都会设置为 ERANGE。那么前者真的有必要吗?单独检查 ERANGE 会不会有问题?
这是我的代码现在的样子
char *endPtr;
errno = 0;
long result = strtol(str, &endPtr, 10);
if(errno == ERANGE)
{
// Handle Error
}
else if(result > INT_MAX || result < INT_MIN)
{
// Handle Error
}
else if(endPtr == str || *endPtr != '\0')
{
// Handle Error
}
num = (int)result;
return num;
如果有前者的原因,请告诉我。
在 Visual Studio 2013 中,我有以下测试代码: #include #include #include #include int main ( int argc, const
这个问题在这里已经有了答案: Correct usage of strtol (5 个答案) 关闭 2 年前。 我一直在尝试使用 strtol 将 char 数组正确转换为 long,检查是否存在上
errno 值 ERANGE 被 POSIX 记录为 Result too large. 和EOVERFLOW被记录为 Value too large to be stored in data typ
此程序在第一个命令行参数上调用 strtod() 并打印返回值: #include #include #include #include int main(int argc, char **a
我正在尝试使用 errno 来检测我是否执行了导致溢出的操作。然而,尽管我编写了一个故意溢出的函数,errno == ERANGE 是错误的。这是怎么回事? 代码如下: #include #incl
我刚刚注意到,当我的代码使用 Visual C++ 2013 编译时,当目标缓冲区太小时,_snprintf 函数将 errno 设置为 ERANGE(结果太大)。这似乎没有记录在案: https:/
我很困惑 errno 没有被设置为 ERANGE之后 strtod()尝试将具有巨大实数的字符串转换为双浮点数。 这是我运行代码时发生的情况: Enter a real number: 5656565
我是一名优秀的程序员,十分优秀!