C言語で文字列を整数に変換する別の方法があるかどうかを調べています。
私のコードにはいつも以下のようなパターンがあります。
char s[] = "45";
int num = atoi(s);
では、もっと良い方法や別の方法はないのでしょうか?
IMOではstrtol
の方が良いとされています。また、私はstrtonum
を気に入っていますので、お持ちの方は使ってみてください(ただし、ポータブルではないことをお忘れなく)。
long long
strtonum(const char *nptr, long long minval, long long maxval,
const char **errstr);
また、C99の標準関数であるstrtoumax
とstrtoimax
にも興味があるかもしれません。例えば、次のように言えます。
uintmax_t num = strtoumax(s, NULL, 10);
if (num == UINTMAX_MAX && errno == ERANGE)
/* Could not convert. */
いずれにしても、atoi
には近づかないでください。
atoi(str)の呼び出しは以下と同等とする。
(int) strtol(str, (char )NULL, 10) と同じです。 と同等ですが、エラー処理が異なる場合があります。値が表現できない場合は 表現できない場合、その動作は未定義です**。