View Full Version : (C++) Char per stringhe come matrice
ciao
ho fatto questo:
char *SoundLista[1000];
SoundLista[0]="suono0";
SoundLista[1]="suono1";
ecco se faccio così non ho niente mentre così sì:
char *SoundLista[1000]={"suono0","suono1"};
SoundLista[0]="suono0";
SoundLista[1]="suono1";
in questo modo me li vede.............. ma ha me servirebbe riempire la matrice ha runtime e non per forza all'inizializzazione
come devo fare?
oppure cosa c'è che non và nel primo modo?
ciao amici
Devi prima allocare i dati per ogni elemento, altrimenti ti può creare grandi problemi...
Se non hai problemi di memoria fai così:
char SoundLista[1000][MAX_PATH];
Ti alloca circa 250 Kb di memoria...
Se invece vuoi allocare solo la memoria che ti serve ogni volta che vuoi inizializzare una stringa devi prima allocarla con new...
SoundLista[x] = new char[strlen(stringa_da_inserire)+1];
strcpy(SoundLista[x], stringa_da_inserire);
Altrimenti usi vector e string del C++...
vector<string> SoundLista;
SoundLista.push_back(stringa_da_inserire);
cionci stò in linea ho alcuni errori................
ho preferito questo:
char SoundLista[1000][MAX_PATH];
SoundLista[NumeroFile][MAX_PATH] = char[strlen(Nom)]MAX_PATH;
strcpy(SoundLista[NumeroFile][MAX_PATH], Nom);
perchè?
Così:
SoundLista[NumeroFile] = new char[strlen(Nom)];
strcpy(SoundLista[NumeroFile], Nom);
SoundLista[NumeroFile] = new char[strlen(Nom)];
strcpy(SoundLista[NumeroFile], Nom);
mi dà errore non può convertire da char * to char [260]
Azzz....ho fatto un errore di confusione :)
Basta la sola seconda riga... Lo spazio di memoriazzazione è già allocato...non c'è bisogno di new ;)
okay ora non ho errori ma SoundLista[NumeroFile]; non contiene nulla..............
Allora diciamola tutta:
char *Nom = new char[a];
WideCharToMultiByte(CP_ACP, 0, finddata.cFileName, -1, Nom, a, NULL, NULL);
strcpy(SoundLista[NumeroFile], Nom);
Nom contiene effettivamente la stringa ma SoundLista[NumeroFile]; ..............no
non hai l'impressione che bisogna aggiungere [MAX_PATH]......??
No... [MAX_PATH] serve a dimensionare le varie componenti del vettore di stringhe...
Tanto per farti capire, se tu dichiari una stringa così:
char s[MAX_PATH];
[MAX_PATH] non lo inserisci mai nelle operazioni sulle stringhe...
Allora perchè ho la stringa SoundList[NumeroFIle]........ vuota
scusami cionci ero io che non controllavo bene il debug infatti ho stampato nel log.txt le stringhe e tutto è corretto...........
scusami sono un pò stanco
ciao
Se invece volessi usare quest'altra:
SoundLista[NumeroFile] = new char[strlen(NomeFile)+1];
la dichiarazione come la faccio?
così ho errori
char SoundLista[1000][MAX_PATH];
... abbia pietà
Così: char *SoundLista[1000];
Ovviamente devi ripulire ogni stringa con delete dopo che l'hai usata...
delete[] SoundLista[i];
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.