|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jun 2001
Città: Pisa
Messaggi: 628
|
merge array dinamici in C
salve a tutti
ho due array di strutture uguali dinamici Codice:
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 dei due array usando memcpy o cose simili senza dovermi sbattere a copiare campo per campo?? cioe' vorrei accodare un array all'altro grazie |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
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ì ? |
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Jun 2001
Città: Pisa
Messaggi: 628
|
Quote:
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 |
|
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
Se ti basta questo esempio : Codice:
#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); } |
|
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: Jun 2001
Città: Pisa
Messaggi: 628
|
Quote:
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 |
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
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ì...
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 08:24.