cat*_*eof 12 c struct pointers
复制包含char数组的两个结构的标准方法是什么?
这是一些代码:
#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;
}
Run Code Online (Sandbox Code Playgroud)
该行printf("%s\n", p2.name);
不打印,因为我释放了缓冲区.
我的结构的问题是它们比struct更大person
.它们包含数百个char指针,我必须逐个复制每个成员.
是否有另一种方法来复制包含char数组的两个结构而不使用malloc
和strcpy
为每个成员?
Ale*_* C. 13
你别无选择,只能自己提供复制功能:
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);
}
Run Code Online (Sandbox Code Playgroud)
这可能比那更详细:检查错误,考虑strlen + strcpy
辅助函数等.
这就是C++中的复制构造函数.
是的,复制包含char 数组的 struct 将没有任何问题,但是带有char 指针的结构(或任何类型的指针)你必须手动完成.
另请注意,C语言中不需要使用malloc的返回类型转换(它在C++中),并且可以隐藏malloc缺少的原型.
归档时间: |
|
查看次数: |
7235 次 |
最近记录: |