Salve,
dato un vector dove ogni elemento è composto da uno struct, a sua volta composto da una stringa (array di char) e da un altro vector.
struct parana
{
char parola[20];
vector<char> anagr;
};
vector<parana> vet;
?
Lo scopo del mio programma, a scopo didattico, è di leggere in input N parole e dopo averle memorizzate nell'array di char, copia ogni singolo carattere nel vector
interno allo struct.
Di seguito il codice del mio programma ed in basso il mio quesito:
struct parana
{
char parola[20];
vector<char> anagr;
};
?
Void inserisci(vector<parana> & arr)
{
int N=0;
unsigned int w;
parana temp;
cin >> N;
for(int i=0; i<N; i++)
{
cin >> temp.parola; // digito una parola
arr.push_back(temp);
for(w=0; w<strlen(arr[i].parola); w++) //scansione lettere della parola
(arr[i].anagr).push_back((arr[i].parola)[w]);
}
void scan(vector<parana> & arr)
{
unsigned int i=0;
unsigned int np=0;
for (; np<arr.size(); np++)
for (; i<strlen(arr[np].parola); i++)
(arr[np].anagr).push_back((arr[np].parola)[i]);
}
int main()
{
vector<parana> vet;
inserisci(vet);
scan(vet);
}
?
Il problema è che non capisco come mai se la copia della stringa la eseguo nella funzione
inserisci va tutto bene, mentre se la eseguo nella funzione
scan viene copiata soltanto la prima stringa.
Per capire le differenze ho lasciato il codice di copia della stringa in entrambe le funzioni che comunque riporto per maggiore chiarezza:
for(w=0; w<strlen(arr[i].parola); w++) //scansione lettere della parola
(arr[i].anagr).push_back((arr[i].parola)[w]);
? for (; i<strlen(arr[np].parola); i++)
(arr[np].anagr).push_back((arr[np].parola)[i]);
Da una prima analisi, che non ho riportato nel codice, ho notato che nella funzione
inserisci vengono stampati gli indirizzi di memoria di tutti i vector
interni anagr e quindi deduco che sono correttamente allocati all'interno dello struct per ogni elemento del vector più esterno.
Nella seconda funzione invece vedo soltanto stampato l'indirizzo di memoria del primo vector interno ma NON quelli dei successivi.
Quindi c'e' un problema di allocazione?! Dove sbaglio?
Vorrei capire come fare questa copia all'interno della funzione 'scan', cancellando ovviamente il codice analogo nell'altra funzione.