[英]C: copying struct/array elements
我有一個已知格式的文件,我想將其轉換為新格式,例如:
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];
問題:用數據填充“舊”后,我不知道如何將其內容復制到“新”。 如果我做
new[0].name = old[0].name;
new[0].data = old[0].data;
我收到關於將char *分配給char [128](分別將struct foo *分配給struct foo [16])的編譯錯誤。
我嘗試了通過Google針對字符串部分找到的解決方案:
strcpy (new[0].name, old[0].name);
new[0].data = old[0].data;
但我不知道如何處理該結構。 似乎我對如何處理數組缺乏基本的了解,但是我不想學習C-我只需要完成此任務即可。
如果您不想學習C,則應該可以使用任何具有半透明IO庫的語言閱讀舊文件格式。
為了完成您要在C中完成的工作,可以使用memcpy。
所以代替:
new[0].data = old[0].data;
采用
memcpy(new[0].data, old[0].data, sizeof(foo) * 16);
您也可以將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;
(解決方案可能太明顯了)
當我們處理數組時,我們無法執行此類操作
new.name = old.name;
所以我想你必須寫一個函數
void Function(char * name,struct new_format * new); 您需要一個一個地分配字符。
顯然,您將這樣調用:Function(old.name,&new)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.