如何在C中复制struct数组

我已经定义了类似的结构

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

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

要获得内容的真实副本,请按照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'则该解决方案将崩溃'\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 ); 

也许使用:

 for(int i=0; i