1
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;
}

ファイルから読み取った文字列を整数値に解析できるプログラムを作成しようとしています。これを行う方法を探しているときに、スタックオーバーフローの投稿で上記のコードを見つけました。

C++で文字列をintに解析する方法は?

しかし、私はそれがどのように機能するのか理解できません。具体的には、errno が 0 に割り当てられている場合、なぜプログラマーは errno == ERANGE かどうかをチェックするのですか? (ERANGEは特別な値ですか?)

次に、「char const *s」(引数リスト内) とはどういう意味ですか?

PS: C++ プログラミングに関しては、私はあまり経験がありません。

4

5 に答える 5

0

C++ で string から int への変換を行うたびに、atoi メソッドを使用しました。あなたがやりたいことに合ったオンラインの例がたくさんあるはずです

于 2012-11-26T16:19:08.980 に答える