今日は 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 規格の仕様的には_結果の価が表現できない場合の動作は未定義_らしい。