【问题标题】:Error handling after doing strtol执行 strtol 后的错误处理
【发布时间】:2013-03-11 19:55:28
【问题描述】:

我正在尝试读取stdin 上的几个数字,每行一个数字。如果任何行上有任何数字和字符串,我想忽略任何尾随文本。为了实现这一点,我使用了以下代码:

while (getline(cin, str)) {
    num = strtol(str.c_str(), NULL, 0);

    if (errno != ERANGE && errno != EINVAL) {
        arr[i++] = num;
        req_pages_size++;
        cout << arr[i-1] << "\t";
    }

    str.clear();
}

问题:转换不成功后,errno 不会更新为成功转换情况的错误值。对于之前不成功的调用,它的值保持不变。

请告诉我如何处理这个问题?

【问题讨论】:

    标签: error-handling errno strtol


    【解决方案1】:

    errno 的联机帮助页指出:

    errno 绝不会被任何系统调用或库函数设置为零

    但您可以按照strtol() 的联机帮助页中的说明将其设置为零

    调用程序应在调用前将errno设置为0,然后在调用后通过检查errno是否为非零值来判断是否出错。

    所以添加

    errno = 0;
    

    在致电strtol()之前

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-23
      • 2015-08-28
      • 1970-01-01
      • 1970-01-01
      • 2015-09-06
      • 2016-06-02
      • 2016-07-14
      • 2015-06-01
      相关资源
      最近更新 更多