C:复制struct / array元素

时间:2009-10-03 10:36:59

标签: c arrays struct copy

我有一个已知格式的文件,我想将其转换为新格式,例如:

struct foo {
    char            bar[256];
};

struct old_format {
    char            name[128];
    struct foo      data[16];
};

struct new_format {
    int             nr;
    char            name[128];
    struct foo      data[16];
};

static struct old_format old[10];
static struct new_format new[10];

问题:用数据填充'old'后我不知道如何将其内容复制到'new'。如果我做

new[0].name = old[0].name;
new[0].data = old[0].data;

我收到一个关于将char *分配给char [128](struct foo * to struct foo [16])的编译错误。

我尝试了一种我通过Google找到的字符串部分的解决方案:

strcpy (new[0].name, old[0].name);
new[0].data = old[0].data;

但我不知道如何处理结构。似乎我对如何处理数组缺乏基本的了解,但我不想学习C - 我只需要完成这项任务。

3 个答案:

答案 0 :(得分:4)

如果您不想学习C,那么您应该能够以任何语言阅读旧文件格式,并使用一个不错的IO库。

要完成您在C中尝试做的事情,可以使用memcpy。

所以而不是:

new[0].data = old[0].data;

使用

memcpy(new[0].data, old[0].data, sizeof(foo) * 16);

答案 1 :(得分:2)

您还可以将C数组包装在struct中。然后复制元素将自动复制数组。

typedef struct {
    char name[100];
} name_array_t;

struct {
    name_array_t name_struct;
    ...
} x;

struct {
    name_array_t name_struct;
    ... other members ...
} y;

x.name_struct = y.name_struct;

答案 2 :(得分:0)

(可能是太明显的解决方案)

当我们处理数组时,我们无法进行这种操作

new.name = old.name;

所以我想你必须写一个函数

void Function(char * name,struct new_format * new); 你需要逐个指定charecter。

显然你会这样打电话:功能(old.name,& new)