我用一些命令行參數運行我的程序。但是,當我輸入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
。
對於託管環境,引用C11
,章§5.1.2.2.1
如果
argc
值大於零,則字符串由argv[0]
指出,代表程序名稱;如果 程序名稱在主機環境中不可用,則argv[0][0]
應爲空字符。如果argc
的值是 大於1,則由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
。
解決方案:你需要
argc
)的數量argv[1] ~ argv[n-1]
而argc == n
int
(對於這種情況,您可以使用strtol()
)解引用一個字符串(*argv[x]
)給你一個char
(在字符串中的第一個字符的值),在這種情況下,值是ASCII '1'
:十進制49
您可以將這些字符串(沒有提領)使用strtol
int arraySize = (int)strtol(argv[1], NULL, 10);
反正argv[0]
是你的程序的名字,你確定那個程序名從1開始?