Cách tiêu chuẩn để sao chép hai cấu trúc có chứa mảng char là gì?Sao chép hai cấu trúc trong C có chứa các con trỏ char
Dưới đây là một số mã:
#include stdio.h>
#include string.h>
#include stdlib.h>
typedef struct {
char* name;
char* surname;
} person;
int main(void){
person p1;
person p2;
p1.name = (char*)malloc(5);
p1.surname = (char*)malloc(5);
strcpy(p1.name, "AAAA");
strcpy(p1.surname, "BBBB");
memcpy(&p2, &p1, sizeof(person));
free(p1.name);
printf("%s\n", p2.name);
return 0;
}
Dòng printf("%s\n", p2.name);
không in một cái gì đó, bởi vì tôi giải phóng bộ đệm.
Vấn đề với cấu trúc của tôi là chúng lớn hơn cấu trúc person
. Chúng chứa hàng trăm con trỏ char, và tôi phải sao chép từng thành viên một.
Có cách nào khác để sao chép hai cấu trúc chứa mảng char mà không sử dụng malloc
và strcpy
cho mọi thành viên không?
Memcpy hoạt động như thế nào, nếu bộ nhớ không được phân bổ cho p2, Ai có thể giải thích? Không nên ném một số ngoại lệ vào thời gian chạy? – JagsVG
Cấu trúc của bạn chứa * con trỏ *, không * mảng *. Con trỏ của bạn có thể chứa địa chỉ của một mảng char, nhưng bạn muốn mảng đó được sao chép, bạn phải quản lý nó một cách rõ ràng. –