strtol 関数は、long 整数の文字列表現を long 値に変換します。ただし、この関数を使用する場合は、エラーを正しく処理する方法を理解することが重要です。
指定されたコードでは、誤った仮定により問題が発生します。このコードは、strtol が文字列を正常に変換した場合、2 番目のパラメーターは NULL に等しくなるはずであるという事実に基づいています。ただし、この仮定が常に当てはまるとは限りません。
strtol からのエラーを効果的に検出するには、適切なエラー処理ガイドラインに従う必要があります。
これらの原則に準拠した parseLong 関数の改訂版は次のとおりです。
static long parseLong(const char *str) { errno = 0; char *temp; long val = strtol(str, &temp, 0); if (temp == str || *temp != '<pre class="brush:php;toolbar:false">bool parseLong(const char *str, long *val) { errno = 0; char *temp; *val = strtol(str, &temp, 0); if (temp == str || *temp != '' || ((*val == LONG_MIN || *val == LONG_MAX) && errno == ERANGE)) { return false; } return true; }' || ((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 if needed } return val; }
あるいは、エラー処理を分離することもできます。変換結果から、変更されたインターフェースを使用できます:
以上がstrtol を正しく使用して文字列を長整数に変換し、潜在的なエラーを処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。