PDA

View Full Version : merge array dinamici in C


huntercity
13-09-2002, 14:49
salve a tutti
ho due array di strutture uguali dinamici


info_ch_dir1 = (info_file *) malloc (n_ch_dir1 * sizeof(info_file));
info_ch_dir2 = (info_file *) malloc (n_ch_dir2 * sizeof(info_file));

con la seguente struttura

typedef struct {
char *name; /* nome della entry */
mode_t tipo; /* indica il tipo di entrata */
time_t t_modifica; /* tempo ultima modifica */
off_t size; /* grandezza */
AZIONI azioni; /* azioni da eseguire sulla entry */
STATO stato; /* mi dice lo stato di una entry */
BOOL esiste; /* Flag per vedere se il file esiste nell'altra directory */
char md5sum[LEN_MD5+1]; /* contiene l'MD5 del file o directory */
} info_file;

i campi sono tutti a dimensione fissa tranne char *name che e' una stringa dinamica


come faccio a fare il merge molto velocemente
dei due array usando memcpy o cose simili
senza dovermi sbattere a copiare campo per campo??
cioe' vorrei accodare un array all'altro

grazie

cionci
13-09-2002, 15:27
Facendo la realloc non puoi usare la memcpy...

Devi allocare un altro spazio grande come la somma dei due e copiare i due vettori consecutivamente in quello spazio...

Hai prvato a fare così ?

huntercity
13-09-2002, 16:23
Originariamente inviato da cionci
[B]Facendo la realloc non puoi usare la memcpy...

Devi allocare un altro spazio grande come la somma dei due e copiare i due vettori consecutivamente in quello spazio...

Hai prvato a fare così ?

e'???
non ho capito
quello che voglio fare io e' il merge dei due array possibilmente scrivendo meno codice possibile, del tipo mi creo l'array di destinazione allocandolo come si deve (cioe' grandezza del primo+secondo) e poi con la memcpy copiarci dentro tutti e due gli array con sole 2 righe, ma non so che parametri usare

il metodo classico sarebbero due for e copiare il contenuto di ogni struttura, pensavo a qualcosa di piu' veloce e corto da scrivere

ciao

cionci
13-09-2002, 19:31
Originariamente inviato da huntercity
[B]quello che voglio fare io e' il merge dei due array possibilmente scrivendo meno codice possibile, del tipo mi creo l'array di destinazione allocandolo come si deve (cioe' grandezza del primo+secondo) e poi con la memcpy copiarci dentro tutti e due gli array con sole 2 righe, ma non so che parametri usare
E' questo che ti volevo dire io...

Se ti basta questo esempio :

#include <stdio.h>
#include <string.h>
#include <malloc.h>

void main()
{
char *v1, *v2, *v3;

v1 = (char *)malloc(10);
strcpy(v1,"abcdefghi");
v2 = (char *)malloc(7);
strcpy(v2,"abcdef");

v3 = (char *)malloc(17);
memcpy(v3,v1,9);
memcpy(v3+9,v2,7);
printf(v3);
}

huntercity
13-09-2002, 20:26
Originariamente inviato da cionci
[B]
E' questo che ti volevo dire io...

Se ti basta questo esempio :

#include <stdio.h>
#include <string.h>
#include <malloc.h>

void main()
{
char *v1, *v2, *v3;

v1 = (char *)malloc(10);
strcpy(v1,"abcdefghi");
v2 = (char *)malloc(7);
strcpy(v2,"abcdef");

v3 = (char *)malloc(17);
memcpy(v3,v1,9);
memcpy(v3+9,v2,7);
printf(v3);
}


perfetto è quello che cercavo, però sopra mi sembra che hai
detto che non funziona con la realloc
allora ho fatto una domanda per niente se è cosi
e mi dovrò fare a mano le cose
visto che i due array di partenza sono reallocati spesso

cionci
14-09-2002, 09:07
Nono...mi sono sbagliato...prova un po' dovrebbe funzionare anche con la realloc...credevo che non allocasse i blocchi contigui e che creasse qualche specie di tabella nello heap...invece non è così...