ホームページ >バックエンド開発 >C++ >strtol を使用して文字列を長整数に変換するときにエラーを確実に処理するにはどうすればよいですか?

strtol を使用して文字列を長整数に変換するときにエラーを確実に処理するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-15 15:08:34609ブラウズ

How Can I Robustly Handle Errors When Using strtol to Convert Strings to Long Integers?

strtol によるエラー処理

strtol 関数は文字列を長整数に変換します。これは文字列から数値データを抽出するのに便利ですが、変換が成功しない場合はエラーが発生する可能性があります。

strtol の動作を理解する

strtol は入力文字列を 3 つに分解します。部分: 空白文字、指定された基数で表される整数 (通常、8 進数の場合は 0、8 進数の場合は 10) 10 進数、または 16 進数の場合は 16)、および残りの認識されない文字。整数表現が無効であるか、文字列に認識できない文字が含まれている場合、変換は実行されません。

エラー検出

strtol でエラーを適切に検出するには、errno を設定することが重要です。関数を呼び出す前にゼロに設定します。これにより、エラーが発生した場合に errno がゼロ以外の値に設定されます。変換の試行後、errno の値を確認できます。ゼロ以外の場合、エラーが発生しました。

parseLong 関数の変更

エラー処理を改善するには、次のように parseLong 関数を変更することを検討してください。

static long parseLong(const char *str)
{
    errno = 0;
    char *temp;
    long val = strtol(str, &temp, 0);

    if (temp == str || *temp != '' ||
        ((val == LONG_MIN || val == LONG_MAX) && errno == ERANGE))
    {
        fprintf(stderr, "Could not convert '%s' to long and leftover string is: '%s'\n",
                str, temp);
        return 0;  // or LONG_MIN/LONG_MAX depending on error
    }

    return val;
}

この変更により、エラーが発生した場合に関数がゼロまたは最小/最大のlong値を返すようになり、エラーに関する詳細情報が提供されます。 error.

その他の考慮事項

次のようなエラー状態を確認する必要があります。

  • 整数表現の後のジャンク文字
  • 無効な数値文字列 (例: "abc")
  • long データ型に対して値が大きすぎるか小さすぎます

以上がstrtol を使用して文字列を長整数に変換するときにエラーを確実に処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。