在 C 中复制两个包含 char 指针的结构

标签 c pointers struct

复制两个包含字符数组的结构的标准方法是什么?

这是一些代码:

#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 数组的结构,而无需为每个成员使用 mallocstrcpy

最佳答案

你别无选择,只能自己提供复制功能:

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/

相关文章:

go - 在动态结构函数 Golang 中修改结构值

c - 收到错误 : Bad file descriptor: ***stack smashing detected*** at writing in client socket, 但套接字描述符正确

ios - 如何将 __autoreleasing 地址保留为类中的强属性?

c - 递归地在链表末尾插入节点

c++ - 基于系统架构的 C++ 中的类大小

闭包中的 Swift 映射元组

c - 关于结构体的动态分配数组并在函数之间发送它

c - 链接库-rpath LD_LIBRARY_PATH

c++ - 这两行代码有什么区别

c - Doxygen - 记录结构变量但不记录结构