簡體   English   中英

C:復制結構/數組元素

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM