如何在C中复制struct数组

时间:2010-09-03 10:56:54

标签: c

我已经定义了像

这样的结构
typedef struct {
    char *oidkey;
    int showperf;
    char oidrealvalue[BUFSIZE];
    char *oidlimits;
} struct_oidpairs;

我有结构数组

 struct_oidpairs b[] ={{.....},....}

我希望将其复制到new struct array a[]

请帮助

5 个答案:

答案 0 :(得分:2)

这样的事情:

memcpy(dest, src, sizeof(struct) * sizeof(src));

答案 1 :(得分:2)

你的struct包含指针作为数据成员,这意味着你必须推出自己的复制函数,它将对指针做一些合理的事情。 memcpy仅适用于与结构相关的所有数据都存储在结构中。

答案 2 :(得分:1)

要获得内容的真实副本,请按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'   {{1}} - 已终止表示未初始化

答案 3 :(得分:0)

不做深刻的复制:

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 );

答案 4 :(得分:-5)

也许正在使用:

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];
}
相关问题