ホームページ >バックエンド開発 >C++ >C の `strtol` 関数を使用するときにエラーを適切に処理するにはどうすればよいですか?

C の `strtol` 関数を使用するときにエラーを適切に処理するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-18 14:57:10195ブラウズ

How Can I Properly Handle Errors When Using C's `strtol` Function?

C の strtol 関数の適切なエラー処理

strtol でのエラー検出

指定された C プログラムでは、strtol の使用法は、文字列から長い文字列への変換が成功するには、2 番目のパラメータ (endptr) を NULL のままにしておく必要があるという事実エラー。ただし、表示されるエラー メッセージは、これが常に当てはまるわけではないことを示しています。

正しいエラー処理方法

strtol でのエラー検出の正しいアプローチには、次のいくつかの手順が含まれます。

1. errno を 0 に設定します: 標準 C ライブラリ関数は errno を 0 に設定しないため、strtol を呼び出す前に手動で設定すると、発生したエラーが errno.

2 に確実に反映されます。変換結果の確認: errno が ERANGE に設定された状態で strtol が 0 または LONG_MIN/LONG_MAX を返した場合、変換エラーまたは範囲外の値を示します。

3.エラー タイプを区別する: 場合によっては、末尾のジャンクや無効な数値形式など、特定のエラー タイプを区別する必要がある場合があります。これは、endptr の位置と errno のエラー値をチェックすることで実現できます。

関数の実装の改訂版

parseLong 関数の改訂版は次のとおりです。

static long parseLong(const char *str)
{
    char *temp;
    errno = 0;  // Reset errno
    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;  // Handle errors by returning a specific value like 0
    }

    return val;
}

この関数は、エラーの場合は 0 を返し、エラーの場合は変換された値を返します。

結論

このエラー分析から得られる重要な点は、errno の設定、変換結果の確認、エラー タイプの区別を含む包括的なエラー処理アプローチを使用することです。これにより、文字列から数値への変換を行う際に、堅牢で信頼性の高いコードが保証されます。

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

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