>> Виступаючий 1: Давайте тепер виправити що остання програма.
І на цей раз, давайте чітко виділити частина пам'яті, в якій
вхід користувача буде зберігатися.
Щоб зробити це, давайте відточують на що в першу рядок коду, де ми оголосили сек
раніше, щоб бути символ зірки.
На цей раз, давайте повторно оголосити це наступним чином -
символ S кронштейн 16, наприклад, закриває дужка.
>> Іншими словами, давайте не оголосила с до НЕ більше бути адреса, за своїм характером,
а масив з 16 символів.
Таким чином, користувач може ввести до 15 символів і залишити місце для
нульовий термінатор.
Перейдемо до Save, компіляції, і Запустити програму.
Зробити scanf2 точка слеш scanf2.
Давайте тепер введіть рядок, як привіт, і ми подякував за вітання.
>> Тепер, є ще проблема.
Я тільки набрав у привіт, який знаходиться всього в п'ять символів, плюс 1 для нульової
термінатор.
Це залишає нас з тільки потреба в шість байтів.
>> Але, на жаль, ми тільки виділено 16 в цілому.
Так що, якщо насправді користувачем типи в 16 символів, або 17, або кілька сотень
символи, ми все ще не збирається є достатньо місця в пам'яті для
вхід користувача.
І справді, це те, що робить отримувати користувальницький введення так
важко взагалі.
І дійсно, саме тому ми впровадили функція рядок потрапити в першу
місце в бібліотеці CS50 -
щоб з'ясувати, як поводитися з тими, ситуації, коли користувач вводить в
більше символів, ніж ми спочатку передбачалося.
>> Чесно кажучи, без повного переписування цю програму,
немає чисте рішення.
Швидше, ми повинні були б зробити, це отримати персонаж з користувальницького один в
Час, знову і знову.
І в кожній точці, якщо ми розуміємо, що ми з пам'яті, ми повинні були б у
що точка повернутися і перерозподілити ще трохи пам'яті, скопіюйте користувача
попередня вхід з нашого першого фрагмента пам'яті в новий,
більше шматок пам'яті.
А потім повторити цей процес знову і знову, поки користувач не робиться забезпечення
його або її введення.