指定された 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 サイトの他の関連記事を参照してください。