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;
}
ファイルから読み取った文字列を整数値に解析できるプログラムを作成しようとしています。これを行う方法を探しているときに、スタックオーバーフローの投稿で上記のコードを見つけました。
しかし、私はそれがどのように機能するのか理解できません。具体的には、errno が 0 に割り当てられている場合、なぜプログラマーは errno == ERANGE かどうかをチェックするのですか? (ERANGEは特別な値ですか?)
次に、「char const *s」(引数リスト内) とはどういう意味ですか?
PS: C++ プログラミングに関しては、私はあまり経験がありません。