1 00:00:00,000 --> 00:00:00,340 2 00:00:00,340 --> 00:00:01,960 >> SPEAKER 1: Bây giờ hãy sửa chữa rằng chương trình cuối cùng. 3 00:00:01,960 --> 00:00:04,920 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 đó 4 00:00:04,920 --> 00:00:06,550 đầu vào của người dùng sẽ được lưu trữ. 5 00:00:06,550 --> 00:00:09,600 Để 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 6 00:00:09,600 --> 00:00:11,590 trước đây là một ngôi sao char. 7 00:00:11,590 --> 00:00:14,210 Thời gian này, chúng ta hãy tái khai báo nó như sau - 8 00:00:14,210 --> 00:00:19,380 char s khung 16, ví dụ, khung gần. 9 00:00:19,380 --> 00:00:23,690 >> 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, 10 00:00:23,690 --> 00:00:26,610 mà là một mảng 16 ký tự. 11 00:00:26,610 --> 00:00:30,295 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 12 00:00:30,295 --> 00:00:31,570 một terminator null. 13 00:00:31,570 --> 00:00:35,870 Hãy tiến hành để tiết kiệm, biên dịch, và chạy chương trình này. 14 00:00:35,870 --> 00:00:40,770 Làm scanf2 dấu chấm dấu gạch chéo scanf2. 15 00:00:40,770 --> 00:00:45,100 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. 16 00:00:45,100 --> 00:00:46,440 >> Bây giờ, vẫn còn một vấn đề. 17 00:00:46,440 --> 00:00:50,140 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 18 00:00:50,140 --> 00:00:50,445 terminator. 19 00:00:50,445 --> 00:00:53,610 Nó lá chúng tôi với chỉ một nhu cầu trong sáu byte. 20 00:00:53,610 --> 00:00:56,740 >> Nhưng không may, chúng tôi chỉ phân bổ 16 trong tổng số. 21 00:00:56,740 --> 00:01:01,305 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 22 00:01:01,305 --> 00:01:04,410 ký tự, chúng tôi vẫn sẽ không có đủ chỗ trong bộ nhớ cho các 23 00:01:04,410 --> 00:01:05,400 đầu vào của người dùng. 24 00:01:05,400 --> 00:01:07,750 Và trong thực tế, đây là những gì làm cho nhận được người sử dụng đầu vào để 25 00:01:07,750 --> 00:01:08,940 khó khăn nói chung. 26 00:01:08,940 --> 00:01:12,270 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 27 00:01:12,270 --> 00:01:13,900 nơi trong thư viện CS50 - 28 00:01:13,900 --> 00:01:16,900 để tìm ra cách để xử lý những trường hợp sử dụng các loại trong 29 00:01:16,900 --> 00:01:19,710 nhân vật nhiều hơn chúng ta dự tính ban đầu. 30 00:01:19,710 --> 00:01:21,750 >> Thành thật mà nói, mà không hoàn toàn viết lại chương trình này, 31 00:01:21,750 --> 00:01:23,290 không có giải pháp làm sạch. 32 00:01:23,290 --> 00:01:26,970 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 33 00:01:26,970 --> 00:01:28,860 thời gian, một lần nữa và một lần nữa. 34 00:01:28,860 --> 00:01:32,510 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 ở 35 00:01:32,510 --> 00:01:36,450 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 36 00:01:36,450 --> 00:01:39,400 đầu vào trước đó từ đoạn đầu tiên của chúng tôi bộ nhớ vào mới, 37 00:01:39,400 --> 00:01:40,810 đoạn bộ nhớ lớn hơn. 38 00:01:40,810 --> 00:01:44,610 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 39 00:01:44,610 --> 00:01:45,860 đầu vào của mình. 40 00:01:45,860 --> 00:01:48,246