我有一个已知格式的文件,我想将其转换为新格式,例如:
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 - 我只需要完成这项任务。
答案 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)