复制两个包含字符数组的结构的标准方法是什么?
这是一些代码:
#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;
}
行 printf("%s\n", p2.name);
没有打印任何东西,因为我释放了缓冲区。
我的结构的问题是它们比结构 person
大。它们包含数百个字符指针,我必须一个一个地复制每个成员。
是否有另一种方法可以复制两个包含 char 数组的结构,而无需为每个成员使用 malloc
和 strcpy
?
最佳答案
你别无选择,只能自己提供复制功能:
void copy_person(person *dst, const person *src)
{
dst->name = malloc(strlen(src->name) + 1);
dst->surname = malloc(strlen(src->surname) + 1);
strcpy(dst->name, src->name);
strcpy(dst->surname, src->surname);
}
可能比这更详细:检查错误,将 strlen + strcpy
分解为辅助函数等。
这就是 C++ 中的复制构造函数的用途。
关于在 C 中复制两个包含 char 指针的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3307493/