Dichiarazione e inizializzazione stringa

di il
5 risposte

Dichiarazione e inizializzazione stringa

Non ho ben chiaro nella dichiarazione e inizializzazione di una stringa perchè nel primo caso il compilatore g++ mi genera un errore:

caso1:
char* tr ="test";
warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]


caso2:
char tr[] ="test";
Mentre in questo caso non ottengo nessun errore, non capisco.

Se invece volessi inizializzare una stringa con valore nullo secondo voi ha senso :
char tr[] ="";
oppure
char tr[] ="\n";

o sono la stessa cosa?

5 Risposte

  • Re: Dichiarazione e inizializzazione stringa

    Con

    char *tr ="test";

    assegni un puntatore costante ad un puntatore e il compilatore ti avvisa in quanto la stringa NON è modificabile in quanto dovresti intervenire sul testo nell'eseguibile. Dovresti scrivere

    const char *tr ="test";

    Se scrivi

    char tr[] ="test";

    allora non usi semplicemente un puntatore ma viene predisposto a runtime lo spazio nella sezione dati per la stringa e questa viene copiata dalla costante in tale spazio. In questo modo la stringa è modificabile perché intervieni sullo spazio in memoria e non sul testo.

    Per le altre domande, la prima stringa avrà lunghezza 0. La seconda stringa avrà lunghezza 1 in quanto contiene un carattere. Non mi sembrano la stessa cosa.
  • Re: Dichiarazione e inizializzazione stringa

    oregon ha scritto:


    Con

    char *tr ="test";

    assegni un puntatore costante ad un puntatore e il compilatore ti avvisa in quanto la stringa NON è modificabile in quanto dovresti intervenire sul testo nell'eseguibile.
    Mi risulta complesso comprendere un puntatore costante ad un puntatore.
    In questa definizione è implicito che tr è un puntatore costante cioè che non è modificabile l'area di memoria utilizzando questo identificatore tr, giusto?
    Dove posso trovare documentazione facile da leggere in merito?
    Per le altre domande, la prima stringa avrà lunghezza 0. La seconda stringa avrà lunghezza 1 in quanto contiene un carattere. Non mi sembrano la stessa cosa.
    ok. capito.
  • Re: Dichiarazione e inizializzazione stringa

    Scrivo da un cellulare ... è un

    puntatore a costante

    non un puntatore costante. Il puntatore a costante a cui mi riferisco è

    "test"

    Sono argomenti del linguaggio C, presenti in qualsiasi libro di C
  • Re: Dichiarazione e inizializzazione stringa

    Ah ok, quindi nel secondo caso la differenza sostanziale è che viene allocata memoria per l'identificatore tr mentre nel primo caso si punta ad una zona di memoria non modificabile (immagino che la stringa test da qualche parte risiederà in memoria che non è modificabile però).
    Ho detto cosa giuste?
  • Re: Dichiarazione e inizializzazione stringa

    Sì, la stringa "test" esiste nell'eseguibile, praticamente nella sezione delle costanti non modificabili e ha un suo indirizzo.
Devi accedere o registrarti per scrivere nel forum
5 risposte