PDA

Visualizza la versione completa : [C++] Problema con matrice char


Sart
02-05-2012, 17:52
Ciao a tutti,
ho un problema con una matrice char.

Essa stata creata cos:



char** path;
.....

path=new char*[1000];
for(int i=0; i<1000; i++) path[i]="non specificato";


Questa matrice mi serve per salvare degli indirizzi di alcuni file che l'utente decide di inserire in un unico file. Quando l'utente ha scelto un indirizzo, subito visualizzo con un MessageBox la stringa creata, la quale giusta. Poi la inserisco nella matrice e visualizzo la posizione della matrice in cui ho inserito la stringa, e di nuovo la path del file corretta.

Per inserire una nuova stringa nella matrice scrivo:


TCHAR buffer[1000]="";

//Operazioni di scrittura nella stringa buffer

path[i]=buffer;


Ma se poi voglio riutilizzarla pi avanti nel programma, ci che resta di quella stringa : IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII.....I III+. La mia domanda : perch??

Se invece di fare una matrice char creo un array string tutto ok. Ma a me serve la matrice char, in quanto poi devo scrivere anch'essa nel file binario e se non vado errato non si possono scrivere variabili di tipo string in un file binario!

Dove sta il problema? :bh:

Who am I
02-05-2012, 18:25
path[i]=buffer;


Con questa istruzione fai puntare ogni puntatore a buffer.Ma buffer un' area di memoria unica.Per cui se tutti i puntatori puntano a buffer, tutti i puntatori puntano alla stessa stringa.Ergo se viene modificata tramite un puntatore, anche gli altri puntatori puntano alla stringa modificata.
L' operatore = funziona con std::string perch definito per la suddetta classe, ma char* un tipo primitivo, assegnandolo a un altro puntatore non sta facendo alcuna copia della stringa.
Usa le funzioni strcpy e strcmp (di cstring) per confrontare le stringhe in stile C.
Oppure usa un array di std::string che poi convertirai a char*.

Sart
02-05-2012, 18:59
Ah ecco :D grazie mille!

Purtroppo a scuola mi insegnano javascript :incupito: ho dovuto imparare il C++ da autodidatta per cui non ho ben chiaro il concetto di puntatore.

Loading