Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    80

    [C++] Problema con matrice char

    Ciao a tutti,
    ho un problema con una matrice char.

    Essa è stata creata così:

    codice:
    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:
    codice:
    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?

  2. #2
    Utente bannato
    Registrato dal
    Apr 2012
    Messaggi
    510
    codice:
    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*.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    80
    Ah ecco grazie mille!

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

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.