执行strtol后的错误处理

时间:2013-03-11 19:55:29

标签: error-handling errno strtol

我想在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没有更新成功转换案例的错误值。对于之前未成功的电话,它的价值保持不变。

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

1 个答案:

答案 0 :(得分:5)

errno的联合帮助页:

  任何系统调用或库函数

都不会将

errno设置为零

但您可以将其设置为零,如strtol()

的联机帮助页中所述
  

调用程序应在调用之前将errno设置为0,然后通过检查调用后errno是否具有非零值来确定是否发生错误。

所以只需添加

errno = 0;

在致电strtol()

之前