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++ - Ritornare un puntatore ad una stringa senza deallocarla
Forum - C/C++ - Ritornare un puntatore ad una stringa senza deallocarla - Pagina 4

Pagine: [ 1 2 3 4 ] Precedente | Prossimo
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 19:22
Martedì, 26/01/2016
Testo quotato

Postato originariamente da Mikelius:

Intanto grazie del tempo che stai dedicandomi,

allora:

EOF è diverso da '\0' che è il terminatore di stringa. '\0' è il NULL per le stringhe, corretto?
Non ero sicuro che fosse implementato a  -1 in tutti i compilatori, ma se dici che è universale ok, per questo ho scritto " tipicamente -1 ".
Pero', se le ritrovo li posto, ho trovato sorgenti che esaminavano una stringa e cercavano come ultimo valore proprio EOF (non '\0' o NULL, c'era proprio stringa == EOF ), in questo caso cosa indicherebbe?

So che concettualmente 0,NULL e "vuoto" sono cose completamente diverse, per un umano.
Per il puntatore a NULL, ho letto da parecchie parti che un puntatore a NULL è un puntatore che non punta a una zona di memoria usabile, e visto che ,visto che celle di memoria "vuote" è impossibile averle, sempre ci saranno valari spazzatura (ecco perchè è bene inizzializzare qualsiasi variabile) il valore NULL viene implementato come indirizzo di memoria 0x00 (ovviamente in questo caso devo pensare come una macchina, quindi se per essa sono la stessa cosa in questo caso, me lo faccio piacere)
in più mi pare di capire che c'è differenza tra un puntatore che punta a NULL e un puntatore che vale NULL.




Allora... "c'è differenza tra un puntatore che punta a NULL e un puntatore che vale NULL" il valore di un puntatore è l'area di memoria putata/indicata, quindi no, non c'è alcuna differenza.

Ti ricordi il mio esempio scemo? è come fare dove_si_trova_bill = NULL.
NON cambi bill, ma da li in poi cercherai bill in un posto in cui non hai accesso.

La memoria costa, e non si spreca inserendoci "valori spazzatura" è semplicemente memoria a cui LA TUA APPLICAZIONE NON HA ACCESSO. Questo vale negli ambienti in cui la memoria è governata dal sistema operativo: è lo stesso S.O. che ti impedisce di usare quella memoria, perchè è (molto probabilmente) dedicata ad altro.

"EOF è diverso da '\0' che è il terminatore di stringa. '\0' è il NULL per le stringhe, corretto?"
EOF è diverso da '\0'? Beh... dipende da che punto di vista.... Logicamente si, sono due cose diverse e tali devono rimanere.
'\0' è il NULL per le stringhe, corretto? No. una stringa NULL è
char* stringa = (char*)NULL; Ovvero una stringa che inizia in una area di memoria a cui non hai accesso.
Il terminatore  di stringa, come ci ricorda nessuno, è NUL (che è diverso da NULL, almeno logicamente).

char* stringa = {99, 105, 97, 111 , NUL};

Questo è un uso corretto e legittimo di NUL.

PM Quote
Pagine: [ 1 2 3 4 ] Precedente | Prossimo