回答編集履歴

3

update

2020/03/12 09:24

投稿

yohhoy
yohhoy

スコア6191

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

2020/03/12 09:24

投稿

yohhoy
yohhoy

スコア6191

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

2020/03/12 09:04

投稿

yohhoy
yohhoy

スコア6191

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]`を安全に表現しておき、最後に符号反転するというトリッキーな実装になっているようです。