Sử dụng con trỏ trong struct

Em chào mọi người ạ .Mọi người cho em hỏi nếu em sử dụng con trỏ trong struct thay vì sử dụng mảng thì khi sử dụng em không biết sai ở đâu mà chương trình của em vẫn chạy được nhưng không thể nào cho em nhập chuỗi được Mn sửa giùm em với ạ

Yêu cầu đăng mã đầy đủ bằng văn bản (sao chép - dán).


Với cái hình và 20 dòng mã thế thì biết sao ở đâu?

3 Likes

dạ vâng em quên mất .Em xin lỗi ạ
Nhưng chắc em đổi cách quá do mai em kiểm tra rồi chắc em xài mảng kí tự .Em cảm ơn anh ạ

s trong hàm nhập thông tin mà khai báo kiểu kia thì thoát hàm nó xoá mất s. Phải cấp phát động nhé.

4 Likes

anh cho em hỏi phải làm như thế nào ạ.

  1. Nếu bạn đang theo cách khai báo mảng ký tự thì thay hàm
    fgets(s, sizeof(s), stdin);
    thành
    gets_s(s);
    Vì hàm fgets dùng để đọc các dòng(chuỗi) trong file mà.
  2. Bạn đang làm việc với C++ thì nên sử dụng thư viện string cho đơn giản.:smiley::smiley: Mình không biết đúng không :rofl::rofl:
3 Likes

stdin cũng là file descriptor nhé.
Thay bằng gets_s thì hỏng vì nó có size chứ ko tự nhiên mà “safe” đâu.

5 Likes

vẫn giữ nguyên fgets, nhưng cho thêm dòng này vào giữa line 13 với 14

fflush(stdin);

Ngoài ra line 16 cần phải copy bằng lệnh strcpy, nếu không nó sẽ không chạy:

if strlen(s) <= strlen(video.phim)
      strcpy(video.phim,s)
1 Like

Thay dòng này :

char s[MAX];

bằng:

if(phim.tenphim!=nullptr) delete[] phim.tenphim;
phim.tenphim = new char[MAX];

Thay dòng :

fgets(s,sizeof(s),stdin);

bằng :

fgets(phim.tenphim, MAX,stdin);

Xóa dòng:

phim.tenphim=s;
3 Likes

Cần gì phải dùng đến bộ nhớ động bác, video là 1 cái struct cục bộ, s cũng là biến cục bộ nhưng trước khi ra khỏi hàm nhập thông tin() thì content của nó được copy vào video.phim rồi, return 1 local struct không có vấn đề gì cả.

Giờ phải yêu cầu thớt post code đầy đủ lên chứ để như này thì vô chừng.

3 Likes

video.phim theo như #1 là một con trỏ, không phải mảng để mà có thể copy.
s khai báo mảng local thì ra khỏi hàm nó sẽ bị thu hồi. Nó bị thu hồi thì có nghĩa dữ liệu của nó còn hay mất chỉ là hên xui.
Tất nhiên return struct local không vấn đề nhưng vấn đề ở đây không phải việc return struct.

2 Likes

Tại sao đến 2020 rồi còn dùng fflush(stdin) vậy :v

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