1 00:00:00,000 --> 00:00:00,340 2 00:00:00,340 --> 00:00:01,960 >> SPEAKER 1: Să repara acum ultima programului. 3 00:00:01,960 --> 00:00:04,920 Și de această dată, să aloce în mod explicit unele de memorie în care 4 00:00:04,920 --> 00:00:06,550 introduse de utilizator vor fi stocate. 5 00:00:06,550 --> 00:00:09,600 Pentru a face acest lucru, haideți să piatra de tocila pe care primul linie de cod în cazul în care ne-am declarat s 6 00:00:09,600 --> 00:00:11,590 înainte de a fi o stea char. 7 00:00:11,590 --> 00:00:14,210 De data aceasta, să re-declare felul următor - 8 00:00:14,210 --> 00:00:19,380 char s consolă 16, de exemplu, aproape suport. 9 00:00:19,380 --> 00:00:23,690 >> Cu alte cuvinte, să declare de a nu mai fi o adresă a unui caracter, 10 00:00:23,690 --> 00:00:26,610 ci mai degrabă o serie de 16 de caractere. 11 00:00:26,610 --> 00:00:30,295 În acest fel, utilizatorul poate tip în până la 15 caractere și încă mai lasă loc pentru 12 00:00:30,295 --> 00:00:31,570 un terminator nul. 13 00:00:31,570 --> 00:00:35,870 Să ne continua pentru a salva, Compile, și Run acest program. 14 00:00:35,870 --> 00:00:40,770 Face scanf2 punct slash scanf2. 15 00:00:40,770 --> 00:00:45,100 Hai acum tastăm un șir ca salut, și ne-a mulțumit pentru salut. 16 00:00:45,100 --> 00:00:46,440 >> Acum, există încă o problemă. 17 00:00:46,440 --> 00:00:50,140 Am scris doar în salut, care este doar cinci caractere, plus 1 pentru nulul 18 00:00:50,140 --> 00:00:50,445 terminator. 19 00:00:50,445 --> 00:00:53,610 Ea ne lasă cu doar o nevoie de șase octeți. 20 00:00:53,610 --> 00:00:56,740 >> Dar, din păcate, ne-am doar alocat 16 în total. 21 00:00:56,740 --> 00:01:01,305 Deci, dacă de fapt utilizator tipuri în 16 caractere, sau 17, sau mai multe sute de 22 00:01:01,305 --> 00:01:04,410 caractere, nu vom mai merge la au suficient spațiu în memorie pentru 23 00:01:04,410 --> 00:01:05,400 intrare de utilizator. 24 00:01:05,400 --> 00:01:07,750 Și, de fapt, aceasta este ceea ce face obtinerea de date introduse de utilizator, astfel 25 00:01:07,750 --> 00:01:08,940 dificil, în general. 26 00:01:08,940 --> 00:01:12,270 Și într-adevăr, acesta este motivul pentru care am implementat funcția șir obține în primul 27 00:01:12,270 --> 00:01:13,900 loc în biblioteca CS50 - 28 00:01:13,900 --> 00:01:16,900 să dau seama cum să se ocupe de cele situațiile în care utilizatorul a tipurilor de 29 00:01:16,900 --> 00:01:19,710 mai multe caractere decât noi anticipat inițial. 30 00:01:19,710 --> 00:01:21,750 >> Sincer, fără complet rescrierea acest program, 31 00:01:21,750 --> 00:01:23,290 nu există nici o soluție curată. 32 00:01:23,290 --> 00:01:26,970 Mai degrabă, ceea ce ne-ar trebui să faceți este să obțineți un caracter de la utilizator cel de la un 33 00:01:26,970 --> 00:01:28,860 timp, din nou și din nou. 34 00:01:28,860 --> 00:01:32,510 Și la fiecare punct în cazul în care ne dăm seama că suntem din memorie, ne-ar trebui să la 35 00:01:32,510 --> 00:01:36,450 acel punct du-te înapoi și să realoce ceva mai multă memorie, copiați utilizator 36 00:01:36,450 --> 00:01:39,400 intrare anterior din prima bucată de memorie în noi, 37 00:01:39,400 --> 00:01:40,810 bucată mai mare de memorie. 38 00:01:40,810 --> 00:01:44,610 Și apoi repetați acest proces din nou și din nou, până când utilizatorul se face furnizarea 39 00:01:44,610 --> 00:01:45,860 intrare lui sau a ei. 40 00:01:45,860 --> 00:01:48,246