strtol を使用した文字列から Long への変換でのエラーの検出
C プログラミングでは、strtol 関数は、文字列表現を変換するためによく使用されます。長整数をその数値に変換します。ただし、strtol を単独で使用すると、常に十分なエラー処理が提供されるとは限りません。
問題:
提供されたコードは、プログラムが文字列を長整数に正しく変換するシナリオを示しています。 、変換が成功したにもかかわらず、「変換できませんでした」というエラー メッセージも出力されます。これは、strtol が文字列を正常に変換した場合、2 番目のパラメーター (残りの文字列を示す) が NULL であるとプログラムが想定しているためです。ただし、特定の状況では、変換が成功した場合でも、NULL 以外の文字列が残る可能性があります。
解決策:
strtol からのエラーを正確に検出するには、次の改善点を検討してください。
改訂された関数:
bool parseLong(const char *str, long *val) { char *temp; bool rc = true; errno = 0; *val = strtol(str, &temp, 0); if (temp == str || *temp != '<pre class="brush:php;toolbar:false">if (parseLong(str, &value)) // Conversion successful else // Handle error' || ((*val == LONG_MIN || *val == LONG_MAX) && errno == ERANGE)) rc = false; return rc; }
使用法:
この改訂された関数変換が成功したかどうかを示すブール値を返します。次のように使用できます:
追加メモ:
以上がC で strtol を使用して文字列を長整数に変換するときにエラーを確実に検出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。