C - 如何使用指向结构的指针复制结构

时间:2013-01-18 16:51:35

标签: c pointers struct

通常制作结构的副本就像使用=运算符一样简单,编译器会生成代码来为您复制结构。但是,对于这一部分,函数必须返回一个指向结构的指针,所以我一直在使用它只是为了达到一个部分,我意识到我尝试的一切都没有正确地复制结构。

我的问题的基本示例是

typedef struct command_stream *command_stream_t;
command_stream_t ty = (command_stream_t) malloc(sizeof(struct command_stream));
command_stream_t yy;

do some code
//ty contains a variable words which is an array of strings

*yy = *ty;
 ty->words = NULL; //set to null to see if yy still contains a copy of the struct
 printf("%s", yy->words[0]);

我在这里遇到了分段错误。但是,如果我改变它,那么它不是指针

typedef struct command_stream command_stream_t

yy=ty;
ty.words = NULL;
printf("%s", yy.words[0]);

这很好用!我不完全确定我应该如何为指针做同样的事情,我真的不想回去改变500多行代码......

2 个答案:

答案 0 :(得分:3)

您的yy指针永远不会被初始化。

你应该在那里分配足够的内存来保存结构,然后像你一样使用*进行复制,或者使用带有指针和大小的memcpy

答案 1 :(得分:0)

你尝试过这样的事吗?

struct command_stream* ty = (struct command_stream*) malloc(sizeof(struct command_stream));

/* do things with the struct */

struct command_stream ty_val = *ty;
struct command_stream yy = ty_val;