Se abbiamoc sintassi aiuto - molto di base
char *val = someString;
e poi dire
if(val){
....
}
qual è la dichiarazione if
in realtà il controllo qui?
Se abbiamoc sintassi aiuto - molto di base
char *val = someString;
e poi dire
if(val){
....
}
qual è la dichiarazione if
in realtà il controllo qui?
La vostra dichiarazione if
è equivalente a:
if (val != NULL) { ...
Il comp.lang.c FAQ contiene this question and answer che va in un po 'più in dettaglio perché questo è vero.
Sta testando se val contiene il puntatore NULL. Se avessi detto,
char * val = NULL;
if (val) {
...
}
il test fallirebbe.
Vuoi dire che fallirebbe? – Tronic
@Tronic Certo che l'ho fatto - mai post su SO prima di colazione! –
se val è un puntatore nullo o no.
Si sta verificando di vedere if (val != 0)
. In C tutti i valori diversi da zero sono veri, zero è falso.
La dichiarazione sta verificando se val
, che è lo stesso di someString
, non è NULL
. Generalmente if (v)
è una scorciatoia per if (v!=0)
.
È sufficiente controllare che val sia NULL o no.
val
è un puntatore a un carattere. Questo può essere impostato su qualsiasi indirizzo -valid o non valido-. L'istruzione if sarà solo controllare se val non è nullo:
if(val)
è equivalente a
if(NULL != val)
equivale a
if((void*)0 != val)
Eppure, il puntatore può puntare a una posizione non valida, ad esempio la memoria che non è nel lo spazio degli indirizzi della tua applicazione. Pertanto, è molto importante inizializzare i puntatori a 0, altrimenti puntano a posizioni non definite. Nella peggiore delle ipotesi, tale posizione potrebbe essere valida e non si noterà l'errore.
Come altri hanno già detto, sta controllando se il puntatore del char non è NULL. Se si desidera verificare se la stringa non è vuota, provare strlen.
val è un puntatore, tale istruzione è uguale a se (val! = 0), mentre 0 è anche definito come NULL, quindi controllerà se quel puntatore sta puntando all'indirizzo NULL, tenere presente che il puntatore stringa NULL non è la stessa stringa vuota
La condizione di sopra indica se il puntatore punta a una stringa non nulla. Se il puntatore punta a una stringa non nulla, la condizione sarà vera.Else, falso.
Perché "approssimativamente"? – Felixyz
@Felixyz: hai ragione, era una formulazione inutile. Ho aggiunto un link per maggiori dettagli. –