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 ạ
Sử dụng con trỏ trong struct
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?
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é.
anh cho em hỏi phải làm như thế nào ạ.
- 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à. - Bạn đang làm việc với C++ thì nên sử dụng thư viện string cho đơn giản.
Mình không biết đúng không
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.
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)
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;
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.
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.
Tại sao đến 2020 rồi còn dùng fflush(stdin)
vậy :v