1 00:00:00,000 --> 00:00:00,340 2 00:00:00,340 --> 00:00:01,960 >> 揚聲器1:現在,讓我們解決 這最後一個程序。 3 00:00:01,960 --> 00:00:04,920 而這一次,讓我們明確地分配 一些存儲在其中 4 00:00:04,920 --> 00:00:06,550 用戶的輸入將被存儲。 5 00:00:06,550 --> 00:00:09,600 要做到這一點,讓我們磨練,首先 在哪裡,我們宣布S碼線 6 00:00:09,600 --> 00:00:11,590 以前是一個char明星。 7 00:00:11,590 --> 00:00:14,210 這一次,讓我們重新申報 它如下 - 8 00:00:14,210 --> 00:00:19,380 char中支架16,例如, 接近支架。 9 00:00:19,380 --> 00:00:23,690 >> 換句話說,讓我們來宣告s到無 再一個字符的地址, 10 00:00:23,690 --> 00:00:26,610 但16個字符,而數組。 11 00:00:26,610 --> 00:00:30,295 通過這種方式,用戶可以輸入最多15個 字符,仍然留有餘地 12 00:00:30,295 --> 00:00:31,570 一個空終止。 13 00:00:31,570 --> 00:00:35,870 讓我們繼續保存,編譯, 並運行此程序。 14 00:00:35,870 --> 00:00:40,770 讓scanf2點斜線scanf2。 15 00:00:40,770 --> 00:00:45,100 現在,讓我們輸入一個字符串像招呼, 並且我們感謝為你好。 16 00:00:45,100 --> 00:00:46,440 >> 現在,仍然有問題。 17 00:00:46,440 --> 00:00:50,140 我只輸入了招呼,這是唯一 五個大字,加1為空 18 00:00:50,140 --> 00:00:50,445 終結者。 19 00:00:50,445 --> 00:00:53,610 它留給我們的只有 需要6個字節。 20 00:00:53,610 --> 00:00:56,740 >> 但不幸的是,我們只 共分配16。 21 00:00:56,740 --> 00:01:01,305 因此,如果用戶實際上類型16 字符,或17,或幾百 22 00:01:01,305 --> 00:01:04,410 字符,我們仍然不會 有足夠的空間在內存中 23 00:01:04,410 --> 00:01:05,400 用戶的輸入。 24 00:01:05,400 --> 00:01:07,750 而事實上,這是什麼使 獲取用戶輸入,因此 25 00:01:07,750 --> 00:01:08,940 難度一般。 26 00:01:08,940 --> 00:01:12,270 事實上,這就是為什麼我們實施 在第一個的get字符串函數 27 00:01:12,270 --> 00:01:13,900 發生在CS50庫 - 28 00:01:13,900 --> 00:01:16,900 弄清楚如何處理這些 情況下,在用戶類型 29 00:01:16,900 --> 00:01:19,710 比我們更多的字符 最初的預期。 30 00:01:19,710 --> 00:01:21,750 >> 坦率地說,不完全 重寫這個程序, 31 00:01:21,750 --> 00:01:23,290 有沒有乾淨的解決方案。 32 00:01:23,290 --> 00:01:26,970 相反,我們所要做的就是讓 來自用戶1的一個字符 33 00:01:26,970 --> 00:01:28,860 時間,一遍又一遍。 34 00:01:28,860 --> 00:01:32,510 並在每個點上,如果我們意識到我們 記憶體不足,我們將不得不在 35 00:01:32,510 --> 00:01:36,450 這一點回去和重新分配 一些更多的內存,複製用戶的 36 00:01:36,450 --> 00:01:39,400 從我們的第一塊前一個輸入 內存入新, 37 00:01:39,400 --> 00:01:40,810 較大塊的內存。 38 00:01:40,810 --> 00:01:44,610 然後重複這個過程, 再次,直到用戶完成提供 39 00:01:44,610 --> 00:01:45,860 他或她的輸入。 40 00:01:45,860 --> 00:01:48,246