gpt4 book ai didi

c - 为什么不能只检查 errno 是否等于 ERANGE?

转载 作者:太空狗 更新时间:2023-10-29 17:20:30 32 4
gpt4 key购买 nike

<分区>

我一直在尝试使用 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;

如果有前者的原因,请告诉我。

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com