2013-12-21 117 views
-2

我學習C和在其中一個例子,我們寫出這樣的程序:argc和argv []在C語言中

#include <stdio.h> 

int main(int argc, char *argv[]) 
{ 
// go through each string in argv 

int i = 0; 
while(i < argc) 
{ 
    printf("arg %d: %s\n", i, argv[i]); 
    i++; 
} 

// let's make our own array of stringd 
char *states[] = {"California", "Oregon", "Washington", "Texas"}; 

int num_states = 4; 
i = 0; // watch for this 
while(i < num_states) 
{ 
    printf("state %d: %s\n", i, states[i]); 
    i++; 
} 

return 0; 
} 

,如果我運行它在終端是這樣的:

./ex11 test arguments 

我得到的輸出:

arg 0: ./ex11 
arg 1: test 
arg 2: arguments 
state 0: California 
state 1: Oregon 
state 2: Washington 
state 3: Texas 

但是我不明白,爲什麼「測試參數」的部分被打印出來,我知道它是與argcargv但我不知道如何。

有人可以解釋這一點給我(最好以一種簡單的方式)?

+4

請查閱您當地的C語言參考 - 最好是一本書。這是非常非常基本的東西。 –

+2

「我寫了一個打印出參數的循環,那麼爲什麼我的程序打印它的參數呢?」 -----我什至不........... – 2013-12-21 22:57:39

回答

1

當一個命令,任何命令,通過在Unix外殼(實際上,任何殼)上運行,然後在命令行被轉換成一個字符串數組:

cmd_argv[0] = "./ex11"; 
cmd_argv[1] = "test"; 
cmd_argv[2] = "arguments"; 
cmd_argv[3] = NULL; 
cmd_argc = 3; 

,然後調用:

execvp(cmd_argv[0], cmd_argv); 

注意,所有的I/O重定向被移除,等等。在內部,則系統結束在cmd_argv數組的開始計數的非空指針的數目,並在新的程序通過它們作爲argv,將計爲argc。新方案保證argc >= 0argv[argc] == NULL

該列表與狀態列表幾乎相同;主要區別在於cmd_argv[cmd_argc]是一個空指針,當然不能保證狀態數據。

1

這就是你的第一個循環所做的,它遍歷argv中的字符串(它包含程序的名稱和你之後鍵入的參數)並打印出來。 Argc是您傳遞的參數數量,或者等同於argv的長度。

1

argv是命令行參數,包括可執行文件的名稱(aguments的值)。 argc是argv(參數計數)中元素的數量。

在你的第一個循環中,你正在打印argv的內容,因此你得到了傳遞給你程序的參數。