neh*_*ham 3 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();
}
Run Code Online (Sandbox Code Playgroud)
ISSUE:转换失败后,errno无法更新成功转换案例的错误值.对于之前未成功的通话,它的价值保持不变.
请让我知道如何处理这个问题?
errno各州的联合会:
errno任何系统调用或库函数都不会将其设置为零
但您可以将其设置为零,如手册页中所述 strtol()
调用
errno之前调用程序应该设置为0,然后通过检查errno调用后是否有非零值来确定是否发生了错误.
所以只需添加
errno = 0;
Run Code Online (Sandbox Code Playgroud)
在打电话之前 strtol()
| 归档时间: |
|
| 查看次数: |
1473 次 |
| 最近记录: |