Shammer's Philosophy

My private adversaria

引数の文字列を数値に変換する

C ではどう書くのだろう、と思ったものの、パっと出てこないので書き残すことにしました。
atoi という関数を使用するようだ。使用するには、stdlib.h を include する必要がある。

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *args[]){
    if( argc == 2 ){
	int x = atoi(args[1]);
	printf("Command line argument value is %d.\n", x);
    }
    else {
	printf("Usage: %s $Number\n", args[0]);
    }
    return 0;
}

atoi は、ASCII to Integer の略だろうか。自分の日記を探してみたが、過去使用したことはあるようだ。
実行結果は以下のような感じ。

$ gcc cliargument.c 
$ ./a.out
$ ./a.out 3
Command line argument value is 3.
$ gcc cliargument.c 
$ ./a.out 3
Command line argument value is 3.
$ ./a.out aaa
Command line argument value is 0.
$ 
$ 
$ 
$ ./a.out aaa ddd
Usage: ./a.out $Number
$ ./a.out 
Usage: ./a.out $Number
$ 

うーん、数値以外が渡された場合もエラーにしたいので、この方法についても今度調べてみよう。
C のドキュメントは、公式のものかは謎だが以下のサイトがよさそう。

http://www.acm.uiuc.edu/webmonkeys/book/c_guide/

このサイトの Index によれば、atoi 以外にも atof や atol もある。
変換の型が違うものの、文字列(コマンドライン引数)を別の型にする際に
使用する関数だろうと思う。