Xin chào, chào mừng trở lại. Đây sẽ là nhiệm vụ cuối cùng của chúng tôi, thử thách cuối cùng của
chúng tôi cho phần con trỏ của chúng tôi.
Trong thử thách này, tôi muốn bạn hiểu cách
phân bổ bộ nhớ động hoạt động. Vì vậy, bạn sẽ cần phải malloc một chuỗi.
Nó sẽ khá cơ bản.
Nhưng nó sẽ giúp bạn hiểu toàn
bộ khái niệm cấp phát bộ nhớ động này.
Ưu điểm của cấp phát bộ nhớ động là gì?
Điều đó có nghĩa là bạn có thể cấp đủ bộ nhớ khi cần.
Bạn không cần phải lãng phí bộ nhớ. Và nếu bạn cần thêm bộ nhớ, bạn có thể phân bổ lại.
Nhiệm vụ này sẽ chỉ có bạn sử dụng malloc.
Vì vậy, trong thử thách này, bạn sẽ viết một chương trình kiểm tra sự hiểu biết của bạn về cấp phát bộ nhớ động.
Tôi muốn bạn viết một chương trình cho phép người dùng nhập một chuỗi văn bản.
Vì vậy, bạn sẽ cần sử dụng scanf. Bạn cũng có thể sử dụng git s,
chúng tôi chưa nói nhiều về nó, nhưng git s hoặc f git s trên
luồng đầu vào tiêu chuẩn sẽ cho phép bạn đọc
một chuỗi có chứa khoảng trắng. Hãy nhớ rằng, scanf nó
sẽ chỉ đọc chuỗi tối đa một khoảng trắng.
Nếu bạn sử dụng git s, bạn có thể đọc nhiều chuỗi được phân tách bằng dấu
cách, mặc dù cách nào cũng được, scanf hoặc git s.
Bạn sẽ yêu cầu người dùng nhập một chuỗi. Chương trình sẽ in văn
bản đã được nhập.
Điều đó có vẻ rất dễ dàng, nhưng sự khác biệt ở đây là chương trình sẽ sử
dụng cấp phát bộ nhớ động.
Bạn cũng có thể yêu cầu người dùng nhập giới hạn của chuỗi họ đang nhập
và sau đó bạn có thể sử dụng giới hạn đó cho malloc, vì vậy bạn biết có bao nhiêu byte cần phân bổ.
Bạn nên tạo một con trỏ char, chỉ một con trỏ ký tự, không có mảng ký tự.
Tôi muốn bạn phân bổ bộ nhớ. Hãy nhớ rằng, khi bạn tạo mảng
ký tự, bộ nhớ đã tự động được cấp phát cho bạn
dựa trên kích thước
mà bạn đặt vào dấu ngoặc. Và một lần nữa, một bất lợi lớn của điều đó là
bây giờ nếu bạn cố gắng nhập một thứ gì đó lớn hơn những gì bạn đã đặt trong kích thước, bạn phải biên dịch lại.
Nó tĩnh. Bộ nhớ đó được cấp phát tại thời điểm biên dịch.
Bộ nhớ động được cấp phát khi bạn đang chạy chương trình.
Và do đó, bạn có thể xác định lượng bộ nhớ bạn muốn phân bổ dựa trên những gì người dùng nhập vào.
Vì vậy, một lần nữa, hãy yêu cầu người dùng nhập một số
cho số byte bạn muốn phân bổ cho chuỗi.
Sau đó, yêu cầu người dùng nhập chuỗi vào.
Và bạn phải phân bổ chính xác bộ nhớ và sau đó chuyển con trỏ ký tự đó vào scanf
hoặc git s và
sau đó về cơ bản chỉ hiển thị văn bản đã được nhập.
Và cuối cùng, đừng quên về tất cả các chức năng miễn phí quan trọng.
Bạn luôn muốn giải phóng bộ nhớ của mình khi sử dụng xong
và bạn muốn đảm bảo rằng bạn làm như vậy để các chương trình khác có
thể sử dụng bộ nhớ đó. Bộ nhớ là một nguồn tài
nguyên khan hiếm, đặc biệt là trên các hệ thống nhúng các chương trình thời gian
thực, vì vậy đừng tích trữ bộ nhớ, hãy giải phóng nó.
Chúc bạn may mắn và tôi sẽ đưa ra giải pháp trong bài giảng tiếp theo. Cảm ơn bạn.