C言語を勉強している初心者です。
C言語のライブラリに用意されているatoi関数について質問です。
言語の勉強のため、atoi関数を自作しています。
下記のようなコードになったのですが、下記のコードには弱点があります。
intのMINである-2147483648を変換するときに、一時的に変数resの中に、2147483648が代入されてしまいます。
intの上限を超えるため未定義となるので、避けたい実装です。
intがオーバーフローを起こさない実装方法は2個ほど思いついたのですが、どちらもスマートではない気がします。
ライブラリの実際のコードが最も素晴らしい実装になっているはずなので、それを答えとして確認したいです。
ですが、調べたところ見つかりませんでした。
私の検索する能力が低く、たどり着けないのか、それともそもそも非公開なのか、ご存知の方がいらっしゃったら、教えていただけますでしょうか。
c
1int ft_atoi(char *str) 2{ 3 int res; 4 int sign; 5 int i; 6 7 res = 0; 8 sign = 1; 9 i = 0; 10 11 while ((str[i] == ' ') || (str[i] == '\t') || (str[i] == '\n') || (str[i] == '\v') || (str[i] == '\r') || (str[i] == '\f')) 12 i++; 13 if (str[i] == '-') 14 sign = -1; 15 if (str[i] == '+' || str[i] == '-') 16 i++; 17 18 while (str[i] && (str[i] >= '0') && (str[i] <= '9')) 19 { 20 res = res * 10; 21 res += (int)str[i] - '0'; 22 i++; 23 } 24 return res * sign; 25}
回答4件
あなたの回答
tips
プレビュー