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.