エラー処理を伴う strtol の適切な使用法
次の C または C プログラムは、strtol が返すという事実に基づいて、文字列を長整数に変換します。変換が成功した場合は NULL。ただし、値 55 を指定すると、次のメッセージが表示されて失敗します。
./convertToLong 55 Could not convert 55 to long and leftover string is: 55 as long is 55
この記事では、strtol のエラーを正しく検出し、指定されたプログラムの問題に対処する方法について説明します。
strtol のエラー処理
strtol (および次のような関連関数) の公式仕様strtoll) は次のように述べています:
プログラムの修正
C では、strtol からのエラー関数を呼び出す前に errno を 0 に設定することで検出できます。以下の変更された 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) { char *temp; bool rc = true; errno = 0; *val = strtol(str, &temp, 0); if (temp == str || *temp != '' || ((*val == LONG_MIN || *val == LONG_MAX) && errno == ERANGE)) rc = false; return rc; }' || ((val == LONG_MIN || val == LONG_MAX) && errno == ERANGE)) fprintf(stderr, "Could not convert '%s' to long and leftover string is: '%s'\n", str, temp); // cerr << "Could not convert '" << str << "' to long and leftover string is '" // << temp << "'\n"; return val; }
C では、より柔軟なアプローチは、成功/失敗インジケーターを返し、変換された値を抽出するための別の関数を提供することです。
結論
これらの変更により、parseLong 関数は strtol からのエラーを正しく処理し、アプリケーションが成功または成功を判断できるようになります。変換の失敗を検出し、エラーを適切に処理します。
以上がC および C で strtol を使用するときにエラーを適切に処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。