>> [音樂播放]
>> DOUG LLOYD：好吧，讓我們 說說命令行參數。
因此，到目前為止，在使用過程中很 多所有程序
可能已經開始 像this-- INT主要無效。
我們一直在收集 如果我們需要用戶輸入
在我們的節目，如 馬里奧方案，例如，
在程序的提示。
修改我們沒有必要 主要的聲明，
因為裡面，而不是我們主要的 只是說，你可以調用它來獲得int類型。
如何大，你想要的金字塔呢？
或者你可以調用它來獲得 float--多大變化
我應該輸出給用戶？
>> 還有另一種方式，雖然， 如果我們希望我們的用戶
要能提供 數據我們的計劃
在運行時，而不是當 程序運行，
一個微妙的區別，但 有時一個非常有用的，
我們需要聲明的主要的一種新形式。
我們不能使用int主要無效的，如果我們想 在命令行收集其他數據
當用戶運行該程序， 因此命令行參數。
>> 為了收集這些命令行 來自用戶的參數，
改變你的聲明 主要的樣子this-- INT
主，開括號，INT ARGC，逗號， 字符串的argv，方括號，
然後打開大括號。
那麼，是什麼意思了嗎？
好了，我們傳遞兩個參數， 或參數，或者輸入為主。
其中一個叫整數 的argc，另一個是什麼？
這是一個字符串數組，對不對？
我們看到，方括號。
它是一個字符串數組。
它不是一個單獨的字符串， 這是一個字符串數組。
而這兩個參數，argc和argv， 讓你知道哪些數據用戶
在命令行提供 又有多少事情，他們
在命令行提供。
非常有用的東西的工作。
>> ARGC代表參數計數， 你應該知道，順便說一下，
你可以撥打ARGC 不管你想要它。
你可以調用任何你想要的argv。
這些只是常規的名字 我們用於them--參數計數，
而我們將在第二次看到， 參數向量，argv的。
但是你沒有給他們打電話 argc和argv，如果你不想，
但傳統上，這就是我們要做的。
>> 所以無論如何，ARGC的參數計數。
這是一個整型變量，因此，作為 你可能會想到，如果我們有兩件事
那我們將要尋找 出這些是什麼類型的
多少東西 用戶輸入，ARGC是
要告訴我們多少 東西的用戶輸入。
所以，它給你一個數 命令行參數的用戶
該程序執行時輸入。
所以，如果你的程序是 運行點斜線貪婪，
和你貪婪的內 計劃你的主要功能
有聲明INT為主INT ARGC， 字符串argv的括號，然後
的argc在這種情況下是1。
現在請注意，我們不 指望有多少事
該程序名後用戶輸入。
程序名稱本身計數 作為命令行參數。
>> 所以點斜線貪婪，在 這種情況下，的argc是其中之一。
如果用戶鍵入斜線貪1024 CS50 在命令行，argc那樣在這種情況下
將三種。
而且我們知道這是因為路 該字符串之間的分工
檢測是是否 有一個空間，或製表符，
或類似的東西他們之間。
這樣的白色空間的任何量，所謂， 值之間鍵入的命令行
表明有多少。
所以點斜線貪婪空間1024太空 CS50，的argc，在這種情況下，是3。
>> ARGV是參數向量。
矢量，順便說一句，只是 另一種說法陣列，
而這是一個數組 存儲字符串。
每個元素一個字符串，它是 琴弦用戶實際上
鍵入的命令行 當程序被執行。
現在，作為是這種情況 與任何陣列，如果
從我們的討論召回 陣列，argv的的第一個元素
總是會被發現 在argv的括號為零。
這是第一個索引 argv數組中。
使will--而事實上，這種意願 永遠是程序的名稱，
將始終位於 argv的括號為零。
>> ARGV的最後一個元素總是被發現 在argv的括號ARGC減一。
你知道為什麼嗎？
還記得多少個元素 存在於這個數組中。
好吧，我們知道that--它 元素ARGC數量。
如果用戶輸入的三樣東西在 命令行，的argc是三。
但是，因為在C，當我們的工作 與陣列，陣列的每個元素，
或者更確切地說，指標 陣列，從零開始。
如果我們有三個要素我們 陣列，我們有一個元件在argv的零，
在argv的一項所述的元件， 並且在argv的二元。
有一個在argv的任何元素 3，和大小的3的陣列。
所以這就是為什麼在過去 argv的元素總能
將在ARGV廣場發現 括號內ARGC減一。
>> 因此，讓我們假設用戶執行 貪婪的程序作為follows--
如果他們在命令行鍵入點 削減貪婪空間1024太空CS50，
而無論出於何種原因，我們已經 已經準備好我們的貪婪計劃
要知道與這些工作 命令行參數。
我們以前不，當我們的工作 它為貪婪的問題，
但讓​​我們說，我們現在已經修改 它讓我們做的過程
以某種方式命令行參數。
在這種情況下，ARGV零 就是點斜線貪婪。
什麼是argv的呢？
嗯，這是1024吧？
這為1024，但這裡有一個 真正重要的distinction--
你還記得的argv的數據類型？
>> 它存儲的字符串，對不對？
但它看起來像1024 是一個整數值。
這是一個非常重要的 區分，而實際上是
要成為東西，你 可能會遇到在以後的問題。
argv中一切 存儲為一個字符串。
所以argv的一個人的內容是 串1,0，二，四，
由這四個字符。
這是因為如果用戶鍵入 1，零，二，四
作為單獨的字母或字符。
它不是整數1024， 所以你不能直接
它說INT 1000的工作，或 而INT x等於argv的一減24。
>> 直覺上，你可能會想到這一點 因為，好，這是1024減24，
所以x等於1000。
但實際上，這並非如此， 因為argv的一個是一個字符串。
字符串1024。
現在有一個功能，可以 用於字符串轉換為整數。
我不會破壞它適合你 現在，但我敢肯定Zamyla
會很高興地告訴你關於它的 演練為未來的問題。
但你也可以找到 問題like--藉口
我，函數會 為此，在參考50，
如果你去參考指南 你可以找到一個函數，
將這種轉換的。
但同樣，在演練 對於未來的問題，
Zamyla將竭誠為 告訴你什麼功能
它是將轉換 串1024至1024的整數。
>> 好吧，讓人感動的。
我們已經介紹了我們的ARGV零， 我們介紹的argv之一。
什麼是argv中二號呢？
CS50。
一個人的可能 不言自明。
什麼是argv中了三頂？
好了，我們真的不知道，對不對？
我們有大小的3的陣列， 這是多少個元素的用戶
鍵入的命令行， 因此，如果我們去ARGV三，
我們現在超越 我們的數組的邊界。
編譯器將讓我們做到這一點， 有沒有直觀的問題是，
但在實際方面是怎麼回事 這種情況，我們真的不知道。
這要看是什麼 位於內存中
的argv 3將被預期為。
因此，我們最終可能 越來越遠逍遙法外。
以上不太可能，特別是當 你，而不是使用的argv正在處理
到任何其他陣列 這是在我們的計劃，
我們很可能會吃虧 段錯誤。如此反复，
一定不要超越邊界 你的陣列，尤其ARGV，
鑑於其較高的程度 在程序中的重要性。
>> 我是道格·勞埃德。
這是CS50。