>> GŁOŚNIK 1: Załóżmy teraz naprawić że ostatni program.
I tym razem, niech wyraźnie przydzielić część pamięci, w którym
Wejście użytkownika będą przechowywane.
Aby to zrobić, niech doskonalić się na tym pierwszym linii kodu, gdzie zadeklarowaliśmy s
wcześniej, aby być gwiazdą char.
Tym razem, niech ponownie deklaruje to w następujący sposób -
char s wspornik 16, na przykład blisko wspornika.
>> Innymi słowy, niech się nie deklarują s już adres postaci,
ale tablica z 16 znaków.
W ten sposób, użytkownik może wpisać do 15 znaków i jeszcze pozostawić miejsce na
terminator null.
Przejdźmy do Save, kompilacji, i Uruchom ten program.
Dodać scanf2 kropka slash scanf2.
Załóżmy teraz wpisz ciąg jak cześć, a my podziękował za cześć.
>> Teraz jest jeszcze problem.
I tylko wpisane w cześć, która jest tylko pięć znaków, plus 1 dla wartości null
terminator.
To pozostawia nam tylko Potrzeba sześć bajtów.
>> Ale niestety, tylko przydzielone 16 w całości.
Więc jeśli użytkownik faktycznie typy w 16 znaków lub 17, lub kilkaset
znaków, nie jesteśmy jeszcze będzie mają wystarczająco dużo miejsca w pamięci dla
Wejście użytkownika.
A w rzeczywistości, to jest to, co sprawia, dane wprowadzone przez użytkownika, tak się
trudne w ogóle.
I rzeczywiście, to właśnie dlatego wdrożyliśmy Funkcja string dostać w pierwszym
miejsce w bibliotece CS50 -
dowiedzieć się, jak radzić sobie z tymi sytuacje, gdy użytkownik wpisze w
więcej znaków, niż początkowo przewidywano.
>> Szczerze mówiąc, nie całkowicie przepisywanie tego programu,
nie ma prostego rozwiązania.
Raczej, co musimy zrobić, to postać z jednej na użytkownika
czas, znowu i znowu.
A w każdym momencie, jeśli uświadomimy sobie, że jesteśmy z pamięci, będziemy musieli w
że punkt wrócić i realokacji trochę więcej pamięci, skopiować użytkownika
poprzednie wejście od naszego pierwszego kawałka pamięci w nowy,
większy fragment pamięci.
A następnie powtórzyć ten proces jeszcze raz i ponownie, dopóki użytkownik dokonuje dostarczania
jego lub jej wejście.