今日は output ナシと言いつつ
twitter で「"abc" を数値に変換ってできるのかしら」という following な方の書き込みを見て手が動いて云々。
ソースはどこだ、と言いつつもでびあんでは libc6-dev な模様。apt-get source して find で探してみたらあった。場所は略。
$ find -name "*.[ch]"|xargs grep atoi|grep int
とかで探してみたら分かります。で定義が以下。
#include <stdlib.h> #undef atoi /* Convert a string to an int. */ int atoi (const char *nptr) { return (int) strtol (nptr, (char **) NULL, 10); }
げ。なんだこれは。だいたいが atoi を_あとい_と呼ぶ田舎者だからねぇ。ちなみに strtol ですが、以下なソースをナニした実行ファイルが
#include <stdio.h> #include <stdlib.h> int main(void) { printf("%ld\n", strtol("0xffh", NULL, 16)); return 0; }
以下の出力な模様。
$ ./test 255 $
範疇外は無視するのか。てーコトは "abc" を atoi したら 0 なのかな??
#include <stdio.h> #include <stdlib.h> int main(void) { // printf("%ld\n", strtol("0xffh", NULL, 16)); printf("%d\n", atoi("abc")); return 0; }
で、コンパイルして実行。
$ gcc -o test main.c -Wall $ ./test 0 $
成程。
追記
ちなみに ansi 規格の仕様的には_結果の価が表現できない場合の動作は未定義_らしい。