首页 > 后端开发 > C++ > 如何正确使用strtol将字符串转换为长整数并处理潜在的错误?

如何正确使用strtol将字符串转换为长整数并处理潜在的错误?

Mary-Kate Olsen
发布: 2024-12-25 17:31:14
原创
777 人浏览过

How Can I Correctly Use strtol to Convert Strings to Long Integers and Handle Potential Errors?

strtol 的正确用法

strtol 函数将长整数的字符串表示形式转换为长值。但是,在使用此函数时,了解如何正确处理错误至关重要。

在给定的代码中,由于错误的假设而出现了问题。该代码依赖于这样一个事实:如果 strtol 成功转换字符串,则第二个参数应等于 NULL。然而,这个假设并不总是成立。

为了有效地检测 strtol 的错误,有必要遵循正确的错误处理准则:

  • 将 errno 设置为 0在调用 strtol 之前: 标准库函数不会将 errno 设置为 0,因此应在每次 strtol 之前手动将其设置为零call.
  • 根据 str 和 *temp != ' ' 检查 temp : 当主题序列为空或不具有预期形式时,会发生错误情况。这由 temp == str 或主题序列后的任何无法识别的字符表示,由 *temp != ' ' 检查。
  • 处理值超出可表示范围:如果转换后的值超出了 long 的可表示范围,strtol 返回 LONG_MIN、LONG_MAX,或将 errno 设置为 ERANGE。应该检查这一点以确保正确处理此类错误。

这是遵循以下原则的 parseLong 函数的修订版本:

static long parseLong(const char *str)
{
    errno = 0;
    char *temp;
    long val = strtol(str, &temp, 0);

    if (temp == str || *temp != '<pre class="brush:php;toolbar:false">bool parseLong(const char *str, long *val)
{
    errno = 0;
    char *temp;
    *val = strtol(str, &temp, 0);

    if (temp == str || *temp != '' ||
        ((*val == LONG_MIN || *val == LONG_MAX) &amp;&amp; errno == ERANGE)) {
        return false;
    }

    return true;
}
登录后复制
' || ((val == LONG_MIN || val == LONG_MAX) && errno == ERANGE)) { fprintf(stderr, "Could not convert '%s' to long and leftover string is: '%s'\n", str, temp); return 0; // or LONG_MIN/LONG_MAX if needed } return val; }

或者,单独的错误处理从转换结果来看,可以使用修改后的接口:

以上是如何正确使用strtol将字符串转换为长整数并处理潜在的错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板