コマンドライン引数でプログラムを実行しています。私は10、10、10を入力し、それらをプリントアウトする場合でも、それはプリントアウト49、49、49ここに私のコードです:Cのコマンドライン引数から整数を表示する
int main(int argc, char *argv[]) {
int seed = *argv[0];
int arraySize = *argv[1];
int maxSize = *argv[2];
ですが、なぜでしょう?
コマンドライン引数でプログラムを実行しています。私は10、10、10を入力し、それらをプリントアウトする場合でも、それはプリントアウト49、49、49ここに私のコードです:Cのコマンドライン引数から整数を表示する
int main(int argc, char *argv[]) {
int seed = *argv[0];
int arraySize = *argv[1];
int maxSize = *argv[2];
ですが、なぜでしょう?
まあ、argv
は、文字列へのポインタの配列です。すべてのコマンドライン引数はの文字列として渡され、それぞれのポインタはargv[n]
で保持されます。引数のシーケンスはn+1
です。 argc
の値がゼロよりも大きい場合C11
、章§5.1.2.2.1
を引用するホストされた環境のために
、文字列は
argv[0]
によって指さプログラム名を表し;argv[0][0]
は、 プログラム名がホスト環境から利用できない場合は、ヌル文字になります。argc
の値が より大きい場合、argv[1]
からargv[argc-1]
の指す文字列は、プログラムパラメータを表します。
ので、はっきりと、
./123 10 10 10 // 123のような実行のためのバイナリ名
argv[0]
は、最初の「コマンドライン引数ではありませんプログラムに渡されました "。それはargv[1]
です。*argv[1]
コマンドライン引数として渡した値のint
が返されません。
基本的には、*argv[1]
はあなた(あなたのプラットフォームが使用しています)その文字列(すなわち、'1'
のchar
値)、最も可能性のASCIIでエンコードされた値の最初の要素の値を与える、ANSD ascii tableに応じ'1'
表示される小数点は49
です。
ソリューション:あなたは
argv[1] ~ argv[n-1]
argc == n
ながら、各引数の文字列の上に引数の数(argc
)のため
int
(この場合、strtol()
を使用できます)文字列(*argv[x]
)を間接参照することはあなたにchar
(文字列の最初の文字の値)を与えるが、この場合には値がASCII '1'
です:あなたは(デリファレンスなし)これらの文字列を変換することができます
49進あなたのプログラムの名前がとにかくargv[0]
を
int arraySize = (int)strtol(argv[1], NULL, 10);
strtolをされ使用して、あなたはプログラム名が1で始まることを確信していますか?