>> SPEAKER 1: Let 's tagad noteikt ka pagājušajā programmu.
Un šoreiz, pieņemsim skaidri sadalīt daži atmiņu, kurā
lietotāja ievadi tiks saglabāti.
Lai to izdarītu, pieņemsim asināt, kas par šo pirmo līnijas kodu, kur mēs deklarētā s
iepriekš būtu char zvaigzne.
Šoreiz pieņemsim atkārtoti deklarēt tā kā šādi -
char s bracket 16, piemēram, close kronšteins.
>> Citiem vārdiem sakot, pieņemsim deklarēt s ne vairs nebūs adrese raksturs,
bet masīvs 16 rakstzīmes.
Tādā veidā, lietotājs var ierakstīt līdz 15 rakstzīmes un vēl jāatstāj
null terminatoru.
Let 's pāriet uz Saglabāt, apkopot, un palaist šo programmu.
Padarīt scanf2 dot slash scanf2.
Pieņemsim tagad ierakstiet virkni, piemēram, hello, un mēs esam pateicās par Hello.
>> Tagad tur ir vēl problēma.
Es tikai drukāti sveiki, kas ir tikai piecas rakstzīmes, plus 1 par null
terminatoru.
Tas atstāj mums tikai vajadzība pēc sešiem baitiem.
>> Bet, diemžēl, mēs tikai piešķirti 16 kopā.
Tātad, ja lietotājs faktiski veidi 16 rakstzīmes, vai 17, vai arī vairāki simti
rakstzīmes, mēs joprojām nav gatavojas ir pietiekami daudz vietas atmiņā
lietotāja ievadi.
Un patiesībā, tas ir tas, kas padara saņemt lietotāja ievadi, lai
grūti vispār.
Un tiešām, tas ir iemesls, kāpēc mēs īstenojām get string funkcija pirmais
vieta CS50 bibliotēkā -
izdomāt, kā rīkoties ar tām situācijas, kad lietotājs veidiem
vairāk rakstzīmes, nekā mēs sākotnēji gaidīts.
>> Atklāti sakot, nav pilnībā pārrakstīšana šo programmu,
tur nav tīrs risinājums.
Drīzāk, kas mums būtu jādara, ir iegūt rakstzīmi no lietotāja kāds ir
laiku, atkal un atkal.
Un katrā brīdī, ja mēs saprotam, ka mēs esam no atmiņas, mums būtu pie
šis punkts iet atpakaļ un pārdalīt dažas vairāk atmiņas, kopēt lietotāja
Iepriekšējā ieeja no mūsu pirmās rieciens atmiņas stājas jaunais,
lielāku rieciens atmiņas.
Un pēc tam atkārtojiet šo procesu vēlreiz un atkal līdz lietotājs tiek darīts nodrošinot
viņa ieejas.