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