>> SPEAKER 1: Bây giờ hãy sửa chữa rằng chương trình cuối cùng.
Và lần này, chúng ta hãy phân bổ một cách rõ ràng một số bộ nhớ trong đó
đầu vào của người dùng sẽ được lưu trữ.
Để làm như vậy, chúng ta hãy trau dồi tại trên mà lần đầu tiên dòng mã mà chúng tôi tuyên bố s
trước đây là một ngôi sao char.
Thời gian này, chúng ta hãy tái khai báo nó như sau -
char s khung 16, ví dụ, khung gần.
>> Nói cách khác, hãy khai báo s không có còn là một địa chỉ của một nhân vật,
mà là một mảng 16 ký tự.
Bằng cách này, người dùng có thể gõ lên đến 15 nhân vật và vẫn còn để lại chỗ cho
một terminator null.
Hãy tiến hành để tiết kiệm, biên dịch, và chạy chương trình này.
Làm scanf2 dấu chấm dấu gạch chéo scanf2.
Bây giờ hãy gõ một chuỗi như xin chào, và chúng tôi cảm ơn sự chào.
>> Bây giờ, vẫn còn một vấn đề.
Tôi chỉ gõ vào xin chào, mà chỉ là năm nhân vật, cộng thêm 1 cho null
terminator.
Nó lá chúng tôi với chỉ một nhu cầu trong sáu byte.
>> Nhưng không may, chúng tôi chỉ phân bổ 16 trong tổng số.
Vì vậy, nếu người sử dụng thực sự các loại trong 16 ký tự, hoặc 17, hoặc vài trăm
ký tự, chúng tôi vẫn sẽ không có đủ chỗ trong bộ nhớ cho các
đầu vào của người dùng.
Và trong thực tế, đây là những gì làm cho nhận được người sử dụng đầu vào để
khó khăn nói chung.
Và quả thật, đây là lý do tại sao chúng tôi thực hiện get chuỗi chức năng trong lần đầu tiên
nơi trong thư viện CS50 -
để tìm ra cách để xử lý những trường hợp sử dụng các loại trong
nhân vật nhiều hơn chúng ta dự tính ban đầu.
>> Thành thật mà nói, mà không hoàn toàn viết lại chương trình này,
không có giải pháp làm sạch.
Thay vào đó, những gì chúng ta sẽ phải làm là có được một nhân vật từ người sử dụng tại một
thời gian, một lần nữa và một lần nữa.
Và tại mỗi điểm nếu chúng tôi nhận ra chúng tôi ra khỏi bộ nhớ, chúng ta sẽ phải ở
thời điểm đó đi trở lại và tái phân bổ một số bộ nhớ hơn, sao chép của người sử dụng
đầu vào trước đó từ đoạn đầu tiên của chúng tôi bộ nhớ vào mới,
đoạn bộ nhớ lớn hơn.
Và sau đó lặp lại quá trình đó một lần nữa và một lần nữa cho đến khi người sử dụng được thực hiện cung cấp
đầu vào của mình.