Si tenemosc sintaxis ayuda - muy básico
char *val = someString;
y luego dicen
if(val){
....
}
lo que es en realidad la declaración if
comprobar aquí?
Si tenemosc sintaxis ayuda - muy básico
char *val = someString;
y luego dicen
if(val){
....
}
lo que es en realidad la declaración if
comprobar aquí?
Su declaración if
es equivalente a:
if (val != NULL) { ...
El FAQ comp.lang.c contiene this question and answer que entra en un poco más detalle por qué esto es cierto.
Está probando si val contiene el puntero NULL. Si hubiera dicho,
char * val = NULL;
if (val) {
...
}
la prueba fallaría.
¿Quieres decir que fallaría? – Tronic
@Tronic Por supuesto que sí, nunca publique en SO antes del desayuno. –
si el val es un puntero nulo o no.
Está comprobando ver if (val != 0)
. En C, todos los valores distintos de cero son verdaderos, cero es falso.
La declaración está comprobando si val
, que es lo mismo que someString
, no es NULL
. En general, if (v)
es un atajo para if (v!=0)
.
Está comprobando que val es NULO o no.
val
es un puntero a un char. Esto se puede establecer en cualquier dirección -valida o inválida-. La sentencia if se acaba de comprobar si val no es nulo:
if(val)
es equivalente a
if(NULL != val)
es equivalente a
if((void*)0 != val)
Aún así, el puntero puede señalar a una ubicación no válida, por ejemplo, memoria que no está en el espacio de direcciones de su aplicación. Por lo tanto, es muy importante inicializar punteros a 0, de lo contrario, señalarán ubicaciones no definidas. En el peor de los casos, esa ubicación podría ser válida y no notará el error.
Como han dicho otros, está comprobando si el puntero del char no es NULL. Si desea verificar si la cadena no está vacía, intente strlen.
val es un puntero, esa declaración es igual a if (val! = 0), mientras que 0 también se define como NULL, por lo que comprobará si ese puntero apunta a la dirección NULL, tenga en cuenta ese puntero NULL no es lo mismo que cadena vacía
La condición if anterior está comprobando si el puntero apunta a una cadena no nula. Si ese puntero apunta a una cadena que no sea nula, la condición será verdadera.Else, false.
¿Por qué "roughly"? – Felixyz
@Felixyz: Tienes razón, esa era una fraseología innecesaria. He agregado un enlace para más detalles. –