Cómo copiar array de struct en C

He definido struct like

typedef struct { char *oidkey; int showperf; char oidrealvalue[BUFSIZE]; char *oidlimits; } struct_oidpairs; 

y tengo arsenal de estructura

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

y quiero copiarlo a la new struct array a[]

por favor ayuda

Algo como esto:

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

Su estructura contiene punteros como miembros de datos, esto significa que tendrá que desplegar su propia función de copia que hará algo sensible con los punteros. memcpy solo funciona si todos los datos relacionados con la estructura se almacenan en la estructura.

Para obtener una copia real de los contenidos, siga la respuesta de Sjoerd y luego:

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

Puedes considerar memcpy si estás interesado en la velocidad.

Actualizar:

  • Siguiendo el código de Harper , actualicé el código para verificar los punteros NULOS
  • Esta es una nota citada de gordongekko :

    Esta solución se bloqueará si oidkey u oidlimits son != NULL y no '\0' -terminado significa que no se inicializó

NO hace una copia profunda:

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

o

 while( len-- ) a[len] = b[len]; ... free( a ); 

tal vez usando:

 for(int i=0; i