回答編集履歴
3
update
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
GNU Cライブラリ(glibc)の [`atoi`関数実装](https://github.com/bminor/glibc/blob/master/stdlib/atoi.c) や [Newlibライブラリ](https://ja.wikipedia.org/wiki/Newlib) の [`atoi`関数実装](https://github.com/bminor/newlib/blob/master/newlib/libc/stdlib/atoi.c) では、単純に`strtol`関数に委譲しているだけですね。
|
1
|
+
GNU Cライブラリ(glibc)の [`atoi`関数実装](https://github.com/bminor/glibc/blob/master/stdlib/atoi.c) や [BSD libcライブラリ](https://ja.wikipedia.org/wiki/BSD_libc) の [`atoi`関数実装](https://github.com/freebsd/freebsd/blob/master/lib/libc/stdlib/atoi.c)、[Newlibライブラリ](https://ja.wikipedia.org/wiki/Newlib) の [`atoi`関数実装](https://github.com/bminor/newlib/blob/master/newlib/libc/stdlib/atoi.c) では、単純に`strtol`関数に委譲しているだけですね。
|
2
2
|
|
3
3
|
|
4
4
|
|
2
refinement
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
GNU Cライブラリ(glibc)の [`atoi`関数実装](https://github.com/bminor/glibc/blob/master/stdlib/atoi.c) や [Newlib](https://ja.wikipedia.org/wiki/Newlib) の [`atoi`関数実装](https://github.com/bminor/newlib/blob/master/newlib/libc/stdlib/atoi.c) では、単純に`strtol`関数に委譲しているだけですね。
|
1
|
+
GNU Cライブラリ(glibc)の [`atoi`関数実装](https://github.com/bminor/glibc/blob/master/stdlib/atoi.c) や [Newlibライブラリ](https://ja.wikipedia.org/wiki/Newlib) の [`atoi`関数実装](https://github.com/bminor/newlib/blob/master/newlib/libc/stdlib/atoi.c) では、単純に`strtol`関数に委譲しているだけですね。
|
2
2
|
|
3
3
|
|
4
4
|
|
1
update
test
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
GNU Cライブラリ(glibc)の [`atoi`関数実装](https://github.com/bminor/glibc/blob/master/stdlib/atoi.c) や [Newlib](https://ja.wikipedia.org/wiki/Newlib) の [`atoi`関数実装](https://github.com/bminor/newlib/blob/master/newlib/libc/stdlib/atoi.c) では、単純に`strtol`関数に委譲しているだけですね。
|
2
|
+
|
3
|
+
|
2
4
|
|
3
5
|
[muslライブラリ](https://ja.wikipedia.org/wiki/Musl) の [`atoi`関数実装](https://github.com/bminor/musl/blob/master/src/stdlib/atoi.c) を引用します:
|
4
6
|
|
@@ -31,3 +33,13 @@
|
|
31
33
|
}
|
32
34
|
|
33
35
|
```
|
36
|
+
|
37
|
+
|
38
|
+
|
39
|
+
> 下記のようなコードになったのですが、下記のコードには弱点があります。
|
40
|
+
|
41
|
+
> intのMINである-2147483648を変換するときに、一時的に変数resの中に、2147483648が代入されてしまいます。
|
42
|
+
|
43
|
+
|
44
|
+
|
45
|
+
muslライブラリでは、累積計算を負数で行うことで範囲`[0, -2147483648]`を安全に表現しておき、最後に符号反転するというトリッキーな実装になっているようです。
|