簡體   English   中英

如何在C中復制結構數組

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

更新:

  • 按照harper的代碼,我更新了代碼以檢查NULL指針
  • 這是gordongekko的引文

    如果oidkeyoidlimits!= 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.

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