30/09/2018, 16:15
Cách cấp phát bộ nhớ động để làm việc với chuỗi ký tự?
- Theo như cách cấp phát bộ nhớ thì ví dụ đối với mảng số nguyên, cấp phát cho n phần tử
int *mang = (int )malloc(nsizeof(int)); - Bây giờ muốn sử dụng con trỏ và cấp phát bộ nhớ để nhập chuỗi bất kỳ thì phải làm như
thế nào, mình làm như sau là đúng hay sai?
char *chuoi = (char *)malloc(sizeof(char));
Bài liên quan
Mình ngĩ nên với dòng trên thì chỉ cấp phát dc cho 1 ký tự, nên để là :
char *chuoi = (char *)malloc(lengh* sizeof(char));
vớilengh
là số ký tự tối đa đươc phép nhập.Tương tự như cấp phát số nguyên ở trên cón
là số lượng phẩn tử ấyEm viết thế này là sai rồi Điền ơi. Phải là
Còn về chuỗi thì Tuấn trả lời ở trên là đúng rồi đấy
Chết thật e viết thiếu đấy chứ lúc làm bài thì cú pháp đúng @ltd
Hai anh @ltd @tuancoi2506 xem giúp e đoạn code này, e hiểu biến lengh rồi, bài của e tương đương đó là DoDaiChuoi. Nhưng để có được giá trị của biến lengh thì mình phải có thao tác khai báo Chuoi[50] và trả về độ dài chuỗi bằng hàm strlen(). Như vậy e muốn hỏi là lúc này bộ nhớ luôn cấp phát 50 ô nhớ trong bộ nhớ để lưu chuỗi, thế thì vẫn tốn bộ nhớ. Câu hỏi chính xác của e lúc này là: Nhập vào một chuỗi và lưu vào một biến con trỏ
Em làm như trong đoạn code có đúng không ạ???
http://codepad.org/d4dQ8EdI
Bài của em không biết trước độ dài của chuỗi và chỉ biết khi nào mình nhập chuỗi vào mà thôi. Thì anh có gợi ý cho em thế này.
Em có thể đọc từng ký tự trong chuỗi bằng hàm getchar(). Sau đó em sẽ dùng hàm realloc để thay đổi vùng nhớ của chuỗi. Anh viết code như sau:
Trong đó anh khởi tạo giá trị đầu tiên của chuỗi là 10, sau đó anh tăng giá trị lên cho đủ.
Cách này như vậy là tối ưu nhất rồi phải không a Đạt? Cho em hỏi bình thường mình quản lí bộ nhớ như thế nào với chuỗi ạ? Tại vì em mới học về con trỏ, em thấy khó quản lí kí tự nhập vào quá.