揚聲器1:現在,讓我們解決 這最後一個程序。 而這一次,讓我們明確地分配 一些存儲在其中 用戶的輸入將被存儲。 要做到這一點,讓我們磨練,首先 在哪裡,我們宣布S碼線 以前是一個char明星。 這一次,讓我們重新申報 它如下 - char中支架16,例如, 接近支架。 換句話說,讓我們來宣告s到無 再一個字符的地址, 但16個字符,而數組。 通過這種方式,用戶可以輸入最多15個 字符,仍然留有餘地 一個空終止。 讓我們繼續保存,編譯, 並運行此程序。 讓scanf2點斜線scanf2。 現在,讓我們輸入一個字符串像招呼, 並且我們感謝為你好。 現在,仍然有問題。 我只輸入了招呼,這是唯一 五個大字,加1為空 終結者。 它留給我們的只有 需要6個字節。 但不幸的是,我們只 共分配16。 因此,如果用戶實際上類型16 字符,或17,或幾百 字符,我們仍然不會 有足夠的空間在內存中 用戶的輸入。 而事實上,這是什麼使 獲取用戶輸入,因此 難度一般。 事實上,這就是為什麼我們實施 在第一個的get字符串函數 發生在CS50庫 - 弄清楚如何處理這些 情況下,在用戶類型 比我們更多的字符 最初的預期。 坦率地說,不完全 重寫這個程序, 有沒有乾淨的解決方案。 相反,我們所要做的就是讓 來自用戶1的一個字符 時間,一遍又一遍。 並在每個點上,如果我們意識到我們 記憶體不足,我們將不得不在 這一點回去和重新分配 一些更多的內存,複製用戶的 從我們的第一塊前一個輸入 內存入新, 較大塊的內存。 然後重複這個過程, 再次,直到用戶完成提供 他或她的輸入。