[英]How to copy array of struct in C
我已經定義了像
typedef struct {
char *oidkey;
int showperf;
char oidrealvalue[BUFSIZE];
char *oidlimits;
} struct_oidpairs;
我有數組的結構
struct_oidpairs b[] ={{.....},....}
我想將其復制到new struct array a[]
請幫忙
像這樣:
memcpy(dest, src, sizeof(struct) * sizeof(src));
您的結構包含指針作為數據成員,這意味着您將必須推出自己的復制函數,該函數將對指針做出明智的選擇。 memcpy
僅適用於與該結構相關的所有數據都存儲在該結構中。
對於內容的真實副本,請遵循Sjoerd的回答,然后:
for (i = 0; i < sizeof(src); i++)
{
if (src[i].oidkey != NULL)
{
dest[i].oidkey = malloc(strlen(src[i].oidkey) + 1);
strcpy(dest[i].oidkey, src[i].oidkey);
}
if (src[i].oidlimits != NULL)
{
dest[i].oidlimits = malloc(strlen(src[i].oidlimits) + 1);
strcpy(dest[i].oidlimits, src[i].oidlimits);
}
}
如果您對速度感興趣,可以考慮使用memcpy。
更新:
如果
oidkey
或oidlimits
為!= NULL
且不是'\\0'
oidlimits
終止意味着未初始化,則此解決方案將崩潰
不制作深層副本:
struct_oidpairs b[] = {...};
size_t len = sizeof b/sizeof*b;
struct_oidpairs *a = malloc(sizeof b);
if( !a ) /* ERROR handling */
memcpy( a, b, sizeof b );
...
free( a );
要么
while( len-- )
a[len] = b[len];
...
free( a );
也許使用:
for(int i=0; i<b.size() ;i++)
//I am not sure if this is the correct name for the size function
{
a[i]=b[i];
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.