[Powered by Google Translate] [命令行參數]
克里斯托弗·巴塞洛繆 - 哈佛大學]
[這是CS50 - CS50.TV]
一個程序一個有用的功能是接受用戶的輸入。
到目前為止，我們已經探討了一些功能在CS50庫
來接受用戶輸入，如“字符串，”
它提示用戶，應用程序正在運行時，為一個字符串。
>> 然而，在某些情況下，你要提供你的程序輸入
它實際上是在運行。
通過這種方式，你不必問從用戶的其他信息
在執行一個簡單的任務。
舉個例子，在UNIX的MV或移動命令。
該命令允許用戶將一個文件從一個位置到另一個。
根據手冊頁，MV接受兩個命令行參數：
正在被移動的文件和該文件的位置被移動到。
因此，這個例子中有一個命令有兩個參數。
那麼，我們如何告訴我們的C程序來使用這些命令行參數？
>> 哦，原來是主要的，這是我們在所有的C程序中使用，有一個秘密。
主要有兩個參數：argc和argv。
讓我們對這些條款。
>> 第一個參數是argc，它代表的參數計數，
有一個數據類型的整數。
argc參數包含參數的個數，包括命令。
在我們的移動命令，雖然我們只有兩個參數顯示，
ARGC的值將是3。
第二個參數，argv的，它代表的參數向量，
是指向字符串的字符指針數組。
>> 這意味著，每個元素在argv，從零開始，
包含的命令和參數。
例如，ARGV [0]，我將把為ARGV零，
總是包含正在運行的命令 -
在這種情況下，毫伏。
ARGV [1]將包含第一個參數，file.txt的，
和argv [2]將包含第二個參數，〜/ CS50 /。
最後一個參數argv的永遠是空的。
因此，讓我們執行這些命令行參數。
在前面的練習中，我們把無效的，沒什麼意思，作為主要的參數。
然而，為了使用命令行參數，
我們需要刪除無效和地點內的主要詮釋argc，焦炭*的argv []。
現在，訪問整個從argv元素，這是你的論點，
你可以簡單地重複，循環，通過這樣的數組。
，裡面的主的身體，我們要繼續前進，然後鍵入一個for循環：
（INT I = 0;我ARGC，我+ +）。
>> 我們不需要一個大括號，在這裡，因為我們只執行一行代碼
身體內的這個循環。
我們將繼續前進，一次打標籤，
然後輸入輸出（ARGV [D]，代表一個整數值，
是％s，對於字符串，然後換行字符。
然後，我們提供printf i為循環的當前迭代
和argv [i]的當前命令行參數的字符串表示形式。
當我們運行它帶有兩個參數，我們可以看到在終端上顯示的參數。
剛才我們說的argv舉行的字符指針數組。
>> 所以，如果是這樣的話，怎麼那麼，我們訪問每個參數的單個字符？
例如，如果我想尋找一個特定的字符中的第一個參數呢？
那麼，答案是，我們需要申請一個嵌套循環
在參數字符串中的每一個元素，然後遍歷。
這是你如何做到這一點。
>> 首先，我們要去副本的example2.c的。
然後，在第一個for循環，
我們要添加一個額外的循環。
因此，對於（J = 0，N = strlen的（的argv []）
然後給了我們當前參數的長度，
J <N; J + +）
我們要打印的每一個字符的位置
內的當前參數使用printf。
所以，printf的（“ARGV [D]，代表當前參數的索引，
然後按[％D]再次的，代表了當前字符的當前參數，
是：％C，在當前字符的參數。
最後，我們提供printf外循環的索引，我
然後索引的內部循環。
>> 而我們的最後一個參數為輸出的參數是實際的字符
在命令行中。
現在，因為我使用了字符串函數strlen獲得一個字符串的長度，
我還必須添加string.h中的庫的頂部，我們有。
因此，要做到這一點，我們就上去，剛下stdio.h中，我們該怎麼辦
＃包括文件。
>> 所以，讓我們編譯和運行，並為它提供的實際參數。
>> 而且，我們可以看到，我們現在已經在參數的確切位置，每個單獨的字符。
所以，就是這樣。我是克里斯托弗·巴塞洛繆，這是CS50。
[CS50.TV]