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 Щоб зробити це, давайте відточують на що в першу рядок коду, де ми оголосили сек 6 00:00:09,600 --> 00:00:11,590 раніше, щоб бути символ зірки. 7 00:00:11,590 --> 00:00:14,210 На цей раз, давайте повторно оголосити це наступним чином - 8 00:00:14,210 --> 00:00:19,380 символ S кронштейн 16, наприклад, закриває дужка. 9 00:00:19,380 --> 00:00:23,690 >> Іншими словами, давайте не оголосила с до НЕ більше бути адреса, за своїм характером, 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 Перейдемо до Save, компіляції, і Запустити програму. 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 Це залишає нас з тільки потреба в шість байтів. 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 І дійсно, саме тому ми впровадили функція рядок потрапити в першу 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 Швидше, ми повинні були б зробити, це отримати персонаж з користувальницького один в 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