enum STR2INT_ERROR { SUCCESS, OVERFLOW, UNDERFLOW, INCONVERTIBLE };
STR2INT_ERROR str2int (int &i, char const *s, int base = 0)
{
char *end;
long l;
errno = 0;
l = strtol(s, &end, base);
if ((errno == ERANGE && l == LONG_MAX) || l > INT_MAX) {
return OVERFLOW;
}
if ((errno == ERANGE && l == LONG_MIN) || l < INT_MIN) {
return UNDERFLOW;
}
if (*s == '\0' || *end != '\0') {
return INCONVERTIBLE;
}
i = l;
return SUCCESS;
}
我正在尝试编写一个程序,该程序可以将从文件中读取的字符串解析为整数值。在寻找执行此操作的方法时,我在 stackoverflow 帖子上找到了上面的这段代码:
但是,我无法理解它是如何工作的。具体来说,如果 errno 被赋值为 0,程序员为什么要检查 errno == ERANGE?(ERANGE 是特殊值吗?)
其次,参数列表中的“char const *s”是什么意思?
PS:我对 C++ 编程不是很有经验。