Mảng Ký tự trong C

E đang làm một cái hàm copy_string theo cách return về. Nhưng bị vướng lúc khai báo để nhận kết quả return.
Ai có thể cho e cách khai báo một cái mảng kí tự nhận được một mảng kí tự khi return từ function được không ạ?


Khi khai báo mảng cho C thì luôn phải xác định số lượng phần tử cụ thể, char name2[] = copy_str(name); là mơ hồ vì không biết kết quả return là dài ngắn bao nhiêu cả.

Copy kiểu vậy thì còn được gọi là Duplicate, hàm tương đương char *strdup(const char *str);. Nhưng thực chất hàm copy_str của bạn không thực sự ‘copy’ vì nó chỉ đơn thuần là trả về địa chỉ cũ thì không có khác biệt với toán tử gán giá trị cả. Bạn có thể dễ dàng tìm được mã nguồn của strdup về tham khảo mà :wink: chúc bạn thành công.

Nếu vẫn chưa được thì bạn tham khảo cấp phát động, con trỏ (chuỗi). Dùng cấp phát động để xin cấp phát 1 vùng nhớ đủ lớn bằng kích thước chuỗi đưa vào str, sau đó là copy từng giá trị trên str vào vùng nhớ đó, return kết quả là xong.

lúc e thử khai báo cả số lượng nó vẫn không được nhưng e thử khai báo theo kiểu con trỏ giống như kiểu con trỏ hàm trả về thì được ạ.

1 Like

Đúng rồi em, anh đang nói cú pháp của C là mảng cần số lượng :joy: còn cái em trả về là con trỏ đang trỏ tới mảng.

Tại e nghĩ nó cũng như mảng số thôi ai dè :stuck_out_tongue:

2 Likes

à a qua được round 18 chưa :V e vẫn đang bí

1 Like

Lol, chuyện riêng thì em nên dùng message :joy: Làm anh hết hồn vì tưởng nay daynhauhoc hoạt động lỗi, post bài lộn topic. Em check messagebox nhé.

1 Like

Khởi tạo không hợp lệ, tổng hợp chút nhé

  1. Khi khai báo mảng cho C thì luôn phải xác định số lượng phần tử cụ thể.
  2. name2[] tên của mảng là hằng chứa giá trị là địa chỉ phần tử đầu tiên của mảng, vế trái phép toán không được là hằng, nên về cơ bản phép gán đã không hợp lệ từ đầu.
    (Không được gán trực tiếp 2 mảng cho nhau)

Mời bác phía dưới comment !

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?