[音樂播放] DAVID馬蘭:好的。 這是CS50,這 是2週結束。 我很抱歉,我不能 那裡與你們的今天, 但你在非常良好的手中。 請允許我介紹 CS50自己的羅布·鮑登。 羅伯BOWDEN:當然,那 我們必須做出這樣的事實樂趣 他給我們送來一個垂直 視頻和顯示此。 [視頻回放] [音樂播放] [腳步聲] - 此視頻也沒有 要看看這種方式。 這本來是可以避免的。 說不垂直視頻。 - 垂直視頻發生在你 把你的相機走錯了路。 您的視頻將結束 看起來像廢話。 - [咕嚕咕嚕] - 有越來越多的人沉迷 每天做垂直視頻。 它不開裂或沒有, 但它仍然是非常糟糕的。 有兩種不同類型的 人誰是患有VVS。 第一組對待 視頻拍攝他們的照片一樣。 他們並不意味著任何傷害。 他們只是不明白, 而你可以把圖片, 你不能真正把一個視頻。 [CRASH] - [猴聲音] -The另一組是人 誰不給[嗶]。 - 垂直視頻綜合症是危險的。 動態影像有 一貫水平。 電視水平。 電腦屏幕是水平的。 群眾的眼睛是水平的。 我們不建 觀看垂直視頻。 - 我愛垂直視頻。 -Nobody在乎你。 - 如果這個問題的 任其發展,你太 將開始顯示四個視頻 在一次只是為了節省帶寬。 -Letterboxed垂直視頻會 是一個郵票大小。 - 和它會到處蔓延。 電影屏幕有 一貫水平。 如果垂直視頻成為 接受,電影院 必須是又高又瘦。 - 和所有的電影院會 必須讓拆掉重建。 而到了時候,他們被重建, 米拉庫尼斯將是又老又醜。 -Birds會撞到他們死。 -We'll都得到僵 脖子是仰視。 - 和沒有人會坐在 前排再次。 -George盧卡斯將重新發布之星 戰爭again--瘦版。 - 我從來沒有真正能夠告訴 我想告訴的故事。 這是一個偉大的機會,我 試驗的新技術。 -You're一個混蛋。 -Every時間移動裝置是用來 錄製視頻,誘惑是存在的。 只是說沒有。 說不喬治·盧卡斯。 說不老蜜拉庫妮絲。 說不垂直視頻。 -and如果你看到有人做出來,說, “你沒有拍攝的正確的虛!” [音樂播放] [結束播放] [掌聲] [AUDIO OUT] 羅伯BOWDEN:--simple 加密的形式, 這基本上是加密 和解密的秘密信息。 所以在這裡我們有一個非常簡單的玩具。 和想法是外環 旋轉內圈周圍。 你可以看到,也許如果我放大 在,that--很難看到的。 但是,等時,數 1--好,感動。 數字1映射到信 X,2號映射到信 J.極其困難 不能快進。 信2映射到J. 3號映射到D.因此, 這個戒指,你可以給 有人信息1,2,3。 出於某種原因,你 想告訴他們XJD。 但是,你可以給他們 數字的一些消息, 並且,只要它們具有本環,它們 可以解密你想說什麼。 所以,你可能已經看到了這一點 密碼學的具體的例子 之前,如果周圍的聖誕節 你看過聖誕故事。 如果你從來沒有見過 之前,那麼就 打開TBS在字面上 任何時候在聖誕節前夕, 因為他們只是顯示它背靠背 要回背靠背一整天。 而相關的視頻是這樣的。 [視頻回放] -be是眾所周知的所有雜 拉爾夫·帕克現 任命小的一員 孤兒安妮秘密圈 並有權所有榮譽 而發生的收益於此。 簽名小孤兒安妮。 會簽皮埃爾·安德烈·墨! 榮譽和利益 已經在九歲的時候! [大呼小叫無線電] -COMe上。 讓我們開始吧。 我不需要所有的爵士樂 關於走私和海盜。 - 聽明天夜間 結論冒險 的黑色海盜船。 現在,它的時間為 安妮的秘密消息 為你的成員秘社的。 請記住孩子,只有成員 安妮的秘密圈 可以解碼安妮的秘密消息。 請記住,伊能靜取決於你。 設置你的引腳為B2。 這裡是該消息。 12。 11。 2。 - 我在我的第一次秘密會晤。 -25。 14。 11。 18。 16。 哦,皮埃爾在巨大的聲音今晚。 我可以告訴大家,今晚的 信息是非常重要的。 -3。 25。 這與安妮自己的消息。 請記住,不要告訴任何人。 - 五秒鐘後,我的唯一 房間在房子裡的九個男孩 可以坐在隱私和解碼。 啊哈! 乙! 我去了下一個。 E.第一個字是“是”。 S.它現在來了更容易。 U. 25。 這是R. -COMe上,拉爾夫! 我得走了! -I'll被降權,馬! 嘖嘖颼颼。 T. O.“一定要” - 一定要什麼呢? 什麼是小孤兒 安妮想說什麼? 一定要什麼? -Randy也得去! 請你出來? - 所有正確的,媽媽! 我馬上就出來! 我是越來越近了。 張力是可怕的。 那是什麼? 這個星球的命運 可以掛在平衡! -Ralphie,蘭迪得走了! -I'll就出來,哭出聲來! 幾乎沒有! 我的手指飛。 我的心是一個鋼鐵陷阱。 每一個毛孔振動。 這幾乎是清楚的! 是。 是。 是。 是。 一定要喝你的阿華田。 阿華田? 一個最低級的商業? 狗娘養的。 [結束播放] 羅伯BOWDEN:所以這就是如何 阿華田涉及到加密。 基本上CS50剛剛公佈 阿華田,所以我們可以 是一個糟糕的商業為阿華田。 好的。 所以現在實際的計算機科學。 還記得在星期一,我們離開 潛水更深的字符串。 因此,我們正在處理 字符串“Zamyla”。 而且我們認識到 事實上,我們可以把 “Zamyla”作為一個字符序列。 請記住,我們學到了 支架符號。 因此,如果該值儲存 在字符串“s”,那麼 如果s表示托架0,這將 指示信資本Z. 如果我們s表示支架1,即 會指示第一小寫一個, 依此類推,直到為s支架5, 這顯示最後一個。 現在,請記住, 此字符串的長度為6, 但是索引到字符串是 0到5,Z通過持續。 所以,現在這個融入一個更大的圖片 您的計算機的內存,您的RAM。 因此,地方的計劃, 你運行你的電腦 需要記住Zamyla 某處存儲器。 因此,我可以有一個志願者? 是的,請。 而你叫什麼名字? 院長:院長。 羅伯BOWDEN:院長? 很高興見到你,院長。 所以來這裡了, 我們要你畫 對我們的好漂亮的內存佈局。 現在,我喜歡把內存 作為一個字節一個長條形, 但只是為了顯示目的,我們將 只是從左至右,從上到下。 OK? 所以,我要表現出 program-- Getstrings.c。 所以,這一切的程序是 做的是要求四根弦 從與用戶 GetString的,然後打印 無論是第一個串進了。 我們忽略了兩個通四人。 確定。 所以,在這裡now--時 我第一次請求S1。 所以你的電腦。 而要實現的GetString。 所以,你請求一個字符串 我,我說好,院長。 給字符串“院長。” 如此在內存,你 需要記住的“院長。” 所以寫到內存的某個地方。 完善。 確定。 所以,現在我們已經S2。 和s2將是 請求給GetString。 所以,我要輸入一個字符串。 我要輸入“漢娜”。 因此,輸入“漢娜”的地方到內存中。 是啊。 A-H。 好了,現在S3。 而這將是另一個 請給GetString。 所以現在進入“瑪麗亞”。 好的。 然後還有最後一個 請求給GetString,S4。 所以,我不知道。 怎麼樣,我們一起去 反政教分離運動。 所以輸入到內存中。 是啊。 所以,只是做“搶”。 確定。 所以,現在explain--何必當初 你離開這些空間? 為什麼你有這樣的空白 空間在這裡,在這裡,並在這裡? 是。 所以,當我去通知 打印s1--所以如果我們 有“漢娜”運行 直到旁邊的“院長” 我們怎麼知道什麼時候 字符串“院長”結束? 因此打印字符串S1可以有 只印有“DeanHannahMariaRob” 如果它不具有任何線索 當“院長”實際上結束。 好的。 因此,在存儲器中的方式,我們實際上 代表的字符串的這一端 是用反斜杠零。 所以這個空間正是我們想要的。 它應該是一個反斜杠為零。 這將是一個反斜杠零, 而這將是一個反斜杠為零。 你可以有一個神話般的獎金 為是一個完美的志願者。 以一個壓力球! 確定。 所以這個人物反斜線為零 我們如何表示字符串的結束。 它是如何在任何給定的程序 要打印的字符串, 這是how--記得我們學 上週strlen函數? 字符串的長度? 它是如何字符串的長度能 確定字符串是多久。 它只是不斷迭代 在人物 直到找到 反斜線零字符。 因此,重要的是要實現 關於反斜線零字符 是它的代表 在位全部為零。 因此注意到,這是明顯的 從零字符。 因此,零字符,如果你還記得 在實施例,他在結束了 講座中,其中的字符映射 用於:像大寫字母A映射到65。 小寫映射到97。 小寫的B。將98。 因此數字0映射用於:我不知道 知道了我的頭頂。 44或45。 某處在該地區。 這樣的字符0是實數。 但是反斜杠零 映射到所有零位。 因此,有區別 反斜線0之間, 我們稱之為空終止。 有區別 反斜線零和字符零。 好的。 所以說話有點了解的字符串。 於是,我們在這裡看到,這是怎麼 它會在內存中進行佈局。 所以這個想法字符串作為一個序列 characters--所以官方電腦 sciency術語序列是一個數組。 所以我們稱之為一個字符串 字符數組。 而實際上有其他數據 類型,我們可以使陣列出來。 因此,要鼓勵這一點,我們來看一個例子。 我們叫它ages0.c我會 複製和粘貼我們的模板。 確定。 因此,這個方案我們 想要做的就是抓住時代 三個學生選修的課程。 因此,我們知道的INT age-- 現在我要說0。 所以,你可能要說AGE-1,但 為了我們會看到非常短的, 我會說INT age0等於調用getInt。 因此,同樣的調用調用getInt 我們一直在使用我 沒有發生被提示 他說,“給我的年齡。” 但只是要求它。 而AGE-1等於調用getInt。 和INT age2等於調​​用getInt。 所以,再一次,三個學生,但 最終的變量指標 是age0通過age2。 確定。 因此,這個程序將採取一切 我們希望與age0,AGE-1,和age2, 但這個方案最終 適用於三個學生。 確定。 所以,現在如果我想四名學生? 好吧,我不得不回去 進入我的代碼,更改註釋, 現在我們有一個int age3等於調用getInt。 確定。 那麼,誰看到了問題嗎? 這是什麼問題 有了這樣的設置呢? 是啊。 是啊。 因此,我們要創建一個 變量為每個學生。 現在的作品,但 最後,如果我現在 說,“我想抓住的年齡 八名學生和16名學生 或將然而,許多學生 在數百名學生在CS50 或者成千上萬的學生在校園裡 或在世界上數十億人? 所以這終究是不可持續的。 你看到自己複製任何時間 而像這樣的粘貼代碼, 你一般應該感到 有一個更好的辦法。 因此,這是我們引入 一個數組聲明。 因此,當你聲明一個數組, 這是一般的格式 是將會是什麼樣的。 我們要說的類型。 然後我們要 給該數組的名稱, 就像我們定義任何給定的變量。 然後最後我們使用 這再次括號符號 但在從不同的上下文 我們如何早期使用它。 所以在這裡,這看起來像一個正常的 我們已經看到變量聲明。 因此,我們以前見過INT×半結腸。 現在好了,我們可能會看到一些東西 如int x托架5。 並把這一想法付諸了 調用getInt程序,我們have-- 所以我們可以實現 此以相同的方式。 讓我們在CS說,我們傾向於使用 N作為某物的數目。 所以在這裡我們要 存儲4個學生。 現在,我們可以說INT年齡 支架N--不太明白yet-- 宣布4名學生組成的數組。 因此,這將如何看在 內存將與此類似。 清除此。 而我們將要在什麼地方 在memory--我把這個在那裡。 如此在存儲器中。 一,二,三,四。 我們有四個整數一行 對於四個整數數組。 因此,目前,什麼是 其中一個框的大小? 是啊。 這是四個字節。 這是32位。 所以,現在,這是不同的 從陣列,我們 看到人物的前面,數組。 在一個字符串中的每個盒子裡只有一個字節, 因為一個字符中只有一個字節。 但隨著整數數組,每個 盒必須是為了四個字節 以滿足整個整數。 所以這是一個數組 4整數會是什麼樣子。 然後回代碼。 現在,我們要實際存儲 到整數數組。 所以,現在這是一個非常,非常,非常 常見的模式是會在某個點 成為肌肉記憶。 所以,INT I等於0。 我小於n。 我加再加。 年齡段i等於調用getInt。 所以這個循環,這種格式, 你應該得到很習慣。 因此,這是通常我們將如何 遍歷幾乎所有的數組。 現在可以看到這樣的 從一開始就解釋了為什麼 我們沒有for循環去為INT i等於1,我小於或等於10。 原因是,從開始 零使這項工作很好地與陣列。 所以數組是零索引。 如果該數組的長度為4, 該指數為0至3。 所以通過第一 迭代的for循環 我們將要設置年齡 支架0等於調用調用getInt。 所以,無論我發生了 在鍵盤上輸入。 在第二遍,我們 設置AGE-1等於調用getInt。 第三關,age2。 最後一傳age3。 因此,如果在該循環的第一次通 我輸入號碼4在鍵盤上, 然後我們會在這裡插入4。 如果我進入了第二遍 50,我們就放了50在這裡。 在第三次我可能 進入負1,負1, 然後最後,如果我進入0--和 現在想起來,這是指數三種。 之後,我們回送,我是 將要增加至4。 i是不再小於n,這是4。 我們跳出循環。 那麼,什麼是錯呢? [聽不清]? 聽眾:[聽不清] 是。 因此,陣列只有四個名額, 這意味著作為索引0至3。 因此,如果是這樣的話,我會 取值4在某些時候。 年齡段4將被設定 無論發生什麼事是在這裡 什麼,我不得不說,進入6。 那將是它設置為6。 但我們不知道什麼是在這裡。 這不是存儲器 我們接觸到。 所以,如果你還記得 以前的講座, 他打印出Zamyla的價值觀和 在某些時候,他打這個細分 故障。所以,你可能會看到 許多段錯誤,你 實施一些習題。 但是,這是一種方式,其中 你可能會遇到一個分割 故障,當你開始訪問 記憶中,你不應該有辦法。 所以我們沒有獲得 這個位置,這是一個錯誤。 因此,這是更好的。 現在還有一個小 問題與此代碼。 而這基本上是我們 還停留在四個學生。 現在,如果我想使用八名學生,確定。 這不是什麼大不了的事。 我可以進去,改變 評論和n更改。 現在,這將與八名學生。 如果我這個編譯並運行 這一點,它會顯示我 - 它會要求整數八 學生和它只是工作。 但它不到理想的需要 重新編譯程序每一次 我想改變學生人數 我想進入的年齡為。 因此,在最後的改進 這一點,因為我們將看到這裡 - 我們 要請求的人的數目。 在這裡,我們有一些 人在房間 或任何年齡段的人在房間裡。 但是,我們將請求數量 人在房間裡,從用戶。 因此,這是完全一樣的做,而 循環,我們以前見過。 這是完全一樣的 do-whil​​e循環,你 可實現對問題的設置。 因此,只要他們是 輸入的n小於1, 因此,有必須是在 至少有一個人在房間裡。 只要他們是 輸入的n小於1, 那麼我們要不斷地問了。 請輸入號碼 人在房間裡。 現在,當我們有多少 人在room-- 所以我可能進入有 有200人在這個房間裡。 然後到這裡,我們要來了 並宣布尺寸200的數組。 我們聲明數組的 大到足以容納200歲。 下來,它的循環 你會得到非常習慣。 所以遍歷數組, 分配給每個位置 在該陣列的整數,和 那麼最終我們在這裡 剛開迭代的例子 通過該數組,而不是分配價值, 但訪問值。 所以,在這裡我們可以看到,我們 從現在說,一年的時間, 人%我將%I歲, 其中第一個%i是我加1。 所以,我是這樣的指標變量。 而第二個%我會是 值存儲在陣列年齡加1。 所以這個加1僅僅是因為我們 saying--這種加1,我加1歲。 這加1僅僅是因為我們 從現在的人說,一年 將這個老。 那麼,為什麼是這樣的我加1? 為什麼我們有一個加1呢? 是啊。 是。 所以請記住陣列零索引。 因此,如果我們打印這個出來 有人剛讀輸出, 那麼很可能他們想看到的東西 喜歡的人之一,個人排名第一, 將20歲。 人二號將是15歲。 他們不想看到的人 零號是15歲。 因此,編譯這一點,只是看到什麼 它看起來like--創建一些空間。 讓年齡編譯。 運行青睞。 我們看到在房間裡的人數。 所以我會說有 三個人在房間裡。 人的頭號年齡, 讓我們說15,20,25。 現在我會說每年從 現在,他們將16,21,26。 讓我們來看看這個作品 的n不等於3。 所以,如果我說的人數是5,一, 二,三,二,一,從現在起一年 他們會是兩個,三個, 四,三,二十歲。 所以,我可以只為 輕易n為10,000。 現在,我會坐在這裡很 一個在進入老齡化,但這個工程。 所以,現在在內存的某個地方,我們 有大小萬的陣列, 所以最終40000 字節,因為有 四個字節為每個整數。 因此,有一組 尺寸萬,我們可以 存儲這些10000人的青睞。 好的。 任何有關這個問題? 是啊。 如果你給一個負數? 讓我們看看會發生什麼。 所以在這個特定case--數 人在房間裡,消極的。 它拒絕了, 因為在這裡,我們發生 待處理的事實,如果n是 不到一個我們要再次問。 如果您嘗試聲明 大小為負的數組, 它通常是行不通的。 所以讓我們試試。 讓我們忽略了什麼 他們的價值輸入n個 而只是說INT年齡負值。 讓我們來看看它甚至編譯。 我不知道。 第 因此,年齡聲明為 陣列具有負大小。 所以前期就識別到陣列不能 為負數的大小和拒絕。 現在,如果我們不處理 這do-whil​​e循環正常, 如果我們不檢查 如果n小於1-- 比方說,我們只是 沒有這在所有 相反,我們只要抓住一個整數。 不管是什麼整數, 我們聲明大小的數組。 因此,編譯器不能 可能抱怨現在。 如果我編譯this-- 因此它不能抱怨, 因為它無法知道我 要輸入一個負數, 這可能是無效的。 對於所有它知道,我可能 輸入一個正數, 這是完全有效的。 所以我想,如果我進入負1 房間裡的人,分段錯誤。 因此,確定。 因此,讓我們加入這回只是 保持它原來是什麼。 因此,請青睞。 現在,如果我想嘗試 負age--讓我們 說,有五人在房間裡。 人的頭號年齡 為負4,人3 是零,人three--行。 所以在這裡,一年後的今天,人的數量 一會是負的3歲。 所以,很可能是沒有意義的。 但是,這僅僅是因為看 在代碼中所有我們正在做的 請求調用getInt。 現在,如果我們曾經有過 GetPositiveInt功能 或者我們剛剛只是做到了這一點 排序一致,而循環出現了下滑, 那麼這將完全正常工作。 但在這個特殊的 情況下,我們只是不 碰巧是處理負值。 有關數組的任何其他問題? 確定。 所以,我們現在已經看到陣列。 而我們將需要使用 本作的命令行參數。 因此,在問題設置two-- 我知道你們許多人 可能仍在工作的問題集 之一,但問題設置兩個快到了。 在問題設置兩個,你要 必須處理字符串,數組, 和命令行參數。 那麼,什麼是命令行參數? 現在,你可以看到到這裡一 小傳情什麼的 將要發生的事情。 我們看到INT為主,INC ARGC, 字符串argv的括號內。 因此,首先讓我們來試著解讀 是什麼,它盡可能地說。 如今,OK。 因此,在命令行中,你應該 已經習慣了某些命令 現在,你可能已經運行 CD在終端前。 因此,如果我們說的CD PSET1, 你知道,這應該 要改變到PSET1目錄。 現在發現,你從來沒有 之前寫的這樣的程序。 你寫的每個程序, 你會跑,說,點斜線馬里奧, 點斜線貪婪,然後 可能會提示您輸入。 現在,這不是 更改目錄一樣。 當你運行光盤,它並沒有那麼說, 該目錄下你想cd到? 相反,你剛才說,CD PSET1和 它只是進入PSET1目錄。 所以類似地,我們有其它例子。 讓你好。 當你運行make,它並沒有那麼說, 該方案將你喜歡做什麼? 你剛才說,在 命令行讓你好。 此舉是另一個例子。 這一次,我們正在移動的 mario.c文件上一級目錄。 所以,現在我們知道這個例子 我們真正傳遞了兩個參數。 有mario.c作為第一個參數, 和點點是第二個參數。 然後當你運行make,你 看到很長的命令line-- 真的長的命令 印在命令行。 因此,長期command--這 是它只有很短的一部分, 但現在我們有三個 命令行參數。 點短跑零,你好,和hello.c的。 因此,這些都是命令行 論點,論據 那你傳遞的 命令行,以便它 不必被提示 當你運行該程序。 這將是令人沮喪,如果當 您運行鐺它說:“好, 這program--這 文件是在編譯? HELLO.C。 什麼標誌你會 想進入?破折號O操作。 你要什麼 該文件被稱為? 你好。 不,你只要運行鐺 衝Ø你好hello.c的。 因此,在回顧這個。 現在argc-- ARGC是參數計數。 它的命令行的數量 輸入參數在命令行。 那麼,argv--技術 在V代表矢量, 這基本上意味著陣列。 但是你可以忽略。 Argv--我們有串argv的, 所以字符串argv的括號內。 因此,這是另一種形式的 括號你以前沒有見過。 所以,我們看到的支架 符號時,我們已經說過了, 像,字符串s等於Zamyla。 小號托架0訪問字符Z. 我們也看到括號時 我們說INT年齡支架5。 這個聲明的大小5陣列。 因此,這裡是一個版本的 我們以前沒見過括號。 因此,這類字符串的argv的 將完全熟悉 這將只是一個字符串。 現在括號表示 這是一個數組。 所以字符串argv的括號手段 這ARGV是一個字符串數組。 現在技術上的字符串 是字符數組。 所以,這是現在一個數組 字符數組的。 但它更容易去思考 串這只是作為一個陣列。 那麼,為什麼會在括號內是空的? 就像,為什麼我們不能說, 支架5,支架N + 是啊。 是啊。 我們不知道有多少 輸入有將要。 因此,如果我們看一下鐺的例子, 我們說鐺破折號Ø你好hello.c的。 在這種特殊情況下,有發生 是三個命令行參數。 這樣一來,brackets--我們拭目以待 在第二它不會是三種。 它在技術上的數字是4。 但支架,我們會 比方說,有三種。 但是現在,如果我們看招 mario.c點點,括號 我們希望把兩個他們。 這裡面有很多的命令是 具有可變數量的命令行 參數。 那麼這個版本的 括號符號表示 是的argv是一個字符串數組。 但是,我們不知道有多少 字符串的數組。 我們如何然後知道如何 許多字符串數組中? 這是整點ARGC。 ARGC告訴我們的argv有多長。 所以,過去的事情保持 頭腦是,從技術上, 命令本身視為一個 的命令行參數。 所以光盤PSET1,有兩種 命令行參數。 在本身的程序,光盤,然後 它的實際參數部分,PSET1。 任何你寫迄今程序 已經有一個命令行argument--點 斜線馬里奧。 這是唯一的命令行參數。 所以,現在看著鐺 衝Ø你好hello.c的。 那麼,什麼是ARGC? 4。 所以ARGC為4。 鐺,所以argv的支架0是鏗鏘。 argv的支架1是衝刺0。 argv的支架2個招呼, argv的支架3 hello.c的。 好了,問題在這,然後我們會 看一些編程的例子。 確定。 因此,我們將看看hello3.c。 所以這應該是由熟悉 的第一個C的例子之一 我們有,我們只想說,你好 世界,但現在這個就比較一般了。 因此,我們在這裡打個招呼 %S反斜線ñargv的支架1。 Notice--所以直至這一點,這是 什麼我的模板文件看起來像。 我有INT主要(無效),然後我會 做一些在主函數。 現在相反,一旦我們開始處理 使用命令行參數, 我們要說明一個 不同的形式為主。 所以在看hello3 再次,主要會 拿兩個參數now-- INT ARGC, 命令行參數的個數, 和字符串argv的支架,實際 輸入字符串在命令行。 所以我要改變這種狀況 模板來反映這一事實。 現在,只要你寫 一個程序,如果你不 需要採取的任何命令行 參數,那麼就使用int主要(無效)。 但是現在,當你寫 命令行參數的程序,其中 你會做的問題 設置two--所以現在你正在運行 需要採取的方案 命令行參數, 你需要有主要的這種形式。 所以這裡 - 這是大用途 的命令行參數。 所以打印的argv 1。 好讓我們編譯 並運行此程序。 讓hello3。 編譯。 點斜線hello3。 而讓我們說,“搶”。 您好羅布。 如果我說,“你好瑪麗亞,”你好瑪麗亞。 您好瑪麗亞。 漢娜還稱,“你好 瑪麗亞,“因為我不是 做我們的argv 2東西。 ARGV 2現在是“漢娜”。 ARGC將是3。 如果我這樣做? 所以,你好空。 他簡要介紹了這一事實 ,從技術上,GetString的 可能返回null,但我們會得到一個 很多成什麼空實際上是。 但把它當作的事 事實上,沒有一般是不好的。 我們做錯了什麼,如果 它的輸出“Hello空。” 其原因我們做了 有些不對勁is--好, 當我跑點斜線hello3,ARGC為1。 因此,這意味著argv的長度為1。 如果數組的長度為1, 唯一有效的指標是零。 所以,這裡的argv 1是外 此數組的範圍。 這是類似於以前,當我試圖 存儲6陣列的端外。 所以我想訪問什麼 在argv數之外, 而我們得到空。 所以一個更好的版本 此,一種改進, 明確檢查ARGC。 因此,如果ARGC等於2,這意味著我們跑 像點斜線hello3羅布。 它會打印“你好搶。” 如果ARGC不等於 2,那麼它只是將 忽略不管你把 在命令行參數 作為命令行參數。 或者,如果你沒有把所有的一切,這是 只是要忽略這一點,只是說, “你好,你。” 因此,編制本。 讓hello4。 而運行hello4。 跑步是這樣, 應該怎樣打印? “你好,你。” 你好,你。 那麼hello4羅布? “你好搶。” 最後,你好羅布·瑪麗亞· 僅僅是“你好,你”了, 因為你沒有真正進入 東西,它的預期。 您輸入了更多的名字 比它可以處理, 所以它只是默認為 你好,你的行為。 因此,在這個問題嗎? 或者命令行參數? 好了,縱觀一 利用夫婦更多的例子 命令行arguments--第一 我們的argv破折號1點溫度。 因此,意見白送什麼 這個程序應該做的。 但是請注意now-- for循環, 這匹配的精確模式 我說了。 我們恰好是 用n個ARGC代替。 現在ARGC真的是n個。 它的argv數組的長度。 因此,在遍歷ARGV 陣列的printf - 荷蘭國際集團各argv的值。 所以,如果我做這個。 請ARGV 1。 它編譯。 點斜線的argv 1。 就在運行這一點, 打印點斜線的argv 1 因為這是唯一的命令行 argument--程序名稱。 總是會有在least-- 的argc不能小於1, 因為總會有至少 是程序名運行。 所以argv的1羅布將打印的argv 1 然後在新行“搶”。 因此在第一次迭代 此循環中,i是0。 ARGV 0是程序名。 點斜線的argv 1。 然後的argv 1是我第一次 命令行參數,這是羅布。 在這一點上,我們是平等的像argc。 我們跳出循環,我們就大功告成了。 因此,這將適用於任意 命令行參數的數目。 請注意,它打印的argv 0,argv的 1,ARGV 2,ARGV 3,argv的4。 而且沒有ARGV 5。 的argc等於5。 因此,在argc--在i等於5, 我們跳出循環。 確定。 因此,我們之前的問題上 看一個更複雜的例子? 所以ARGV 2。 好的。 因此,我們仍然打印 命令行參數。 但現在發現,我們有 一個嵌套的循環。 那麼,什麼是該做的? 因此,第一個循環是做 正是以前一樣。 我們還在遍歷 每一個命令​​行參數, 但現在這第二loop--我們已經 之前也看到了這樣的事情。 當他被遍歷 Zamyla打印出Z-A-M-Y-L-A。 所以這第二個循環對於int j為 0,n等於argv的支架我的strlen的。 因此,讓我們首先想到的 the--讓我們穿行。 讓我們思​​考什麼電腦會 怎麼做,如果我跑這個項目剛才點 斜線的argv衝刺2。 所以,如果我跑這個代碼,然後 的argc將是等於1。 和字符串argv--這裡只有 將是一個索引argv中, 而這將是等於點 斜線的argv 2--程序名稱。 好了,現在我等於0,小於我 1,我加再加對於int j為0, n等於argv的支架0 strlen的,所以在 此循環的第一次迭代。 ARGV 支架0點斜線的argv 2。 那麼,什麼是該字符串的長度? 好了,點斜線A-R-G-V儀表板2。 這樣的strlen的,這將是8。 所以j為0,n等於8。 只要j是小於8,J ++。 有了這樣的,我們要成為 打印單個字符,它 是argv的支架我括號學家 因此,只有我是零。 我們仍然只有一個 命令行參數。 在這第一次迭代 的for循環,我們 將要印刷 argv的支架0支架0。 然後j被要遞增。 而且我們要打印 argv的支架0支架1。 然後argv的支架0支架2。 所以這是我們第一次遇到 多維數組。 還記得前面我說的 這ARGV在技術上 字符的數組的數組。 所以在這裡,如果我說的一樣 字符串s等於argv的支架我, 然後我說,S支架Ĵ,這 將完成同樣的事情。 現在,你已經看過小號支架學家 這只是訪問的第j個 字符該字符串。 因此,與這一點,我們所得到的 第i個的argv的第j個字符。 那麼,這應該最終輸出? 做的argv 2。 它編譯。 點斜線的argv 2。 “羅布·瑪麗亞·漢娜,” 並給我們一些空間。 所以我們看到,這是輸出 點上了自己的線,斜線 在自己的線路和自己的行。 它打印出的每個 個性 每個命令行參數。 然後在它們之間, 因為這個新線 我們要打印到這裡,在 他們之間它會打印新的生產線。 因此,這是類似於 以前的argv破折號1, 它印在每個 命令行參數, 但現在我們要打印 命令行參數 然後通過每個迭代 每一個命令​​行參數的字符 得到這個輸出。 OK? 因此,在這個問題嗎? 有一點要注意的是, 命令行arguments-- 所以它們之間用空格分隔為 你自然會期望他們。 這樣一個串可具有在它的空間。 這不是超級重要,但如果我 希望第三個命令行參數 有一個空間,然後我 可以說這樣的事情。 OK? 所以這個現在還只有三個 命令行arguments--以及4。 點斜線的argv衝刺2,搶, 瑪麗亞和漢娜彭博。 確定。 在這個問題? 沒有什麼特別的 有關空格字符。 這恰好是該 命令行把空格字符 如何你分開每一個參數。 好的。 那麼接下來的問題集 two--你將是 看著密鑰加密。 因此,類似於在實施例 我們從聖誕故事看到, 你將要實施的一些 即,給定的消息的算法, 你要能 該消息加密 只有具有這個秘密的人 鍵,用解碼器環, 應該能夠進行解密。 所以這是標​​準版。 你會被執行 兩個不同的版本。 如果你碰巧看看 在現在的黑客版 - 的, 我們打算給 你喜歡這樣的字符串, 它表示一個加密口令。 所以,你的目標是要弄清楚 解密的口令是什麼。 現在,這其實是多麼的密碼 存儲在很多計算機, 它只是存儲此 隨機字符串。 你必須弄清楚如何獲得 從這個隨機字符串 什麼原始密碼了。 最後,在此之後 問題集,你應該 能夠理解這是什麼意思。 所以,您將學習如何解密 這種隨機的字符串。 同樣,如果您從週記 0,你可能已經看到了這個網址。 而且你應該能 最終解密此。 你可能不會開心,當你 解密並點擊鏈接。 好的。 以上就是今天。 所以,看到你下週! [電子音樂播放]