Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - stringhe
Forum - C/C++ - stringhe

Avatar
jaco94++ (Normal User)
Expert


Messaggi: 203
Iscritto: 22/10/2008

Segnala al moderatore
Postato alle 18:03
Mercoledì, 06/03/2013
Ho bisogno di un aiuto a capire una cosa sulle stringhe in c:
non capisco perchè se io scrivo il seguente codice:
Codice sorgente - presumibilmente C/C++

  1. char p='l';
  2. char *pp=&p;
  3. printf(pp);


mi salta fuori un indirizzo di memoria e devo usare *pp per avere il carattere, mentre se scrivo questo:
Codice sorgente - presumibilmente C/C++

  1. char *p="ciao";
  2. char *pp=p;
  3. printf(pp);


mi viene fuori ciao, perchè in questo caso non viene fuori un indirizzo di memoria ?

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 18:15
Mercoledì, 06/03/2013
A me questo:

Codice sorgente - presumibilmente C/C++

  1. char p='l';
  2. char *pp=&p;
  3. printf(pp);



Ritorna "1". Che compilatore stai usando?


Il mio blog: https://piero.dev
PM Quote
Avatar
ZioCrocifisso (Member)
Pro


Messaggi: 135
Iscritto: 06/03/2013

Segnala al moderatore
Postato alle 18:46
Mercoledì, 06/03/2013
Nel primo caso, stai printando una stringa non terminata: nel C le stringhe sono puntatori a sequenze di caratteri (char) terminate da un NULL o \0 (il carattere con indice 0, da non confondere con il carattere '0', che ha indice 48 nella tabella ASCII). Nel tuo caso il puntatore punta a un singolo carattere, seguito da altri byte indefiniti, e dunque printf cercherà altri caratteri finché non troverà uno \0.
Nel secondo caso il puntatore pp ha lo stesso valore del primo, e dunque punta al primo carattere della stringa "ciao". printf printerà caratteri finché non troverà uno \0 (che si trova dopo la 'o').

Ultima modifica effettuata da ZioCrocifisso il 06/03/2013 alle 18:48
PM Quote