PDA

View Full Version : (C++) Char per stringhe come matrice


okay
03-04-2005, 10:53
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

cionci
03-04-2005, 11:30
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);

okay
03-04-2005, 15:52
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è?

cionci
03-04-2005, 16:11
Così:

SoundLista[NumeroFile] = new char[strlen(Nom)];
strcpy(SoundLista[NumeroFile], Nom);

okay
03-04-2005, 16:15
SoundLista[NumeroFile] = new char[strlen(Nom)];
strcpy(SoundLista[NumeroFile], Nom);

mi dà errore non può convertire da char * to char [260]

cionci
03-04-2005, 16:23
Azzz....ho fatto un errore di confusione :)

Basta la sola seconda riga... Lo spazio di memoriazzazione è già allocato...non c'è bisogno di new ;)

okay
03-04-2005, 16:35
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]......??

cionci
03-04-2005, 16:40
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...

okay
03-04-2005, 16:42
Allora perchè ho la stringa SoundList[NumeroFIle]........ vuota

okay
03-04-2005, 17:03
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

okay
03-04-2005, 17:40
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à

cionci
03-04-2005, 17:44
Così: char *SoundLista[1000];

Ovviamente devi ripulire ogni stringa con delete dopo che l'hai usata...

delete[] SoundLista[i];