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.
その他の考慮事項
次のようなエラー状態を確認する必要があります。
以上がstrtol を使用して文字列を長整数に変換するときにエラーを確実に処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。