1 00:00:00,000 --> 00:00:00,340 2 00:00:00,340 --> 00:00:01,960 >> Sprecher 1: Lassen Sie uns nun fix dass im letzten Programm. 3 00:00:01,960 --> 00:00:04,920 Und dieses Mal wollen wir explizit zuordnen einige Speicher, in dem die 4 00:00:04,920 --> 00:00:06,550 Eingabe des Benutzers gespeichert werden. 5 00:00:06,550 --> 00:00:09,600 Um dies zu tun, wollen wir schärfen an diesem ersten Codezeile, wo wir erklärt s 6 00:00:09,600 --> 00:00:11,590 zuvor auf ein char Stern. 7 00:00:11,590 --> 00:00:14,210 Dieses Mal wollen wir wieder erklären es wie folgt - 8 00:00:14,210 --> 00:00:19,380 char s Klammer 16, zum Beispiel, Klammer zu. 9 00:00:19,380 --> 00:00:23,690 >> In anderen Worten, wir erklären s kein eine Adresse eines Zeichen länger sein, 10 00:00:23,690 --> 00:00:26,610 sondern ein Array von 16 Zeichen. 11 00:00:26,610 --> 00:00:30,295 Auf diese Weise können die Benutzer in bis zu 15 Charaktere und noch Raum für 12 00:00:30,295 --> 00:00:31,570 ein Null-Terminator. 13 00:00:31,570 --> 00:00:35,870 Lassen Sie uns gehen Sie zu Speichern, Kompilieren, und Ausführen dieses Programms. 14 00:00:35,870 --> 00:00:40,770 Machen scanf2 dot Strich scanf2. 15 00:00:40,770 --> 00:00:45,100 Lassen Sie uns nun eine Zeichenfolge wie hallo, und wir sind für die hallo dankte. 16 00:00:45,100 --> 00:00:46,440 >> Nun, es gibt noch ein Problem. 17 00:00:46,440 --> 00:00:50,140 Ich habe nur in hallo eingegeben haben, was nur fünf Zeichen, plus 1 für die Null 18 00:00:50,140 --> 00:00:50,445 Terminator. 19 00:00:50,445 --> 00:00:53,610 Es bleibt uns nur eine Notwendigkeit für sechs Bytes. 20 00:00:53,610 --> 00:00:56,740 >> Aber leider nur wir zugeteilt insgesamt 16. 21 00:00:56,740 --> 00:01:01,305 Also, wenn der Benutzer tatsächlich in 16 Arten Zeichen oder 17 oder mehrere hundert 22 00:01:01,305 --> 00:01:04,410 Zeichen, wir sind immer noch nicht zu genug Platz im Speicher für die 23 00:01:04,410 --> 00:01:05,400 Benutzereingabe. 24 00:01:05,400 --> 00:01:07,750 Und in der Tat, das ist, was macht Benutzereingaben immer so 25 00:01:07,750 --> 00:01:08,940 schwierig im Allgemeinen. 26 00:01:08,940 --> 00:01:12,270 Und in der Tat, das ist, warum wir umgesetzt die get-String-Funktion in der ersten 27 00:01:12,270 --> 00:01:13,900 Platz in der CS50-Bibliothek - 28 00:01:13,900 --> 00:01:16,900 um herauszufinden, wie man diese umgehen Situationen, in denen der Benutzer in 29 00:01:16,900 --> 00:01:19,710 mehr Zeichen, als wir zunächst erwartet. 30 00:01:19,710 --> 00:01:21,750 >> Ehrlich gesagt, ohne sie komplett Umschreiben dieses Programm, 31 00:01:21,750 --> 00:01:23,290 es gibt keine saubere Lösung. 32 00:01:23,290 --> 00:01:26,970 Vielmehr, was wir tun müssen, ist erhalten eine Figur aus dem Benutzer eine an ein 33 00:01:26,970 --> 00:01:28,860 Zeit, wieder und wieder. 34 00:01:28,860 --> 00:01:32,510 Und an jedem Punkt, wenn wir erkennen, wir sind aus der Erinnerung, wir haben zu 35 00:01:32,510 --> 00:01:36,450 Punkt zurück, dass in und umverteilen einige mehr Speicher, kopieren Sie die Benutzer- 36 00:01:36,450 --> 00:01:39,400 vorherige Eingabe von unserem ersten Stück der Speicher in der neuen, 37 00:01:39,400 --> 00:01:40,810 größeren Teil des Speichers. 38 00:01:40,810 --> 00:01:44,610 Und dann wiederholen Sie diesen Prozess wieder und wieder, bis der Benutzer fertig ist die Bereitstellung 39 00:01:44,610 --> 00:01:45,860 seine Eingabe. 40 00:01:45,860 --> 00:01:48,246