Estaba mirando un ejemplo y vi esto:
char *str; /* ... */ if (!str || !*str) { return str; }¿Significa que está vacío o algo así?
str es un puntero char. ! lo niega. Básicamente, !str se evaluará como verdadero (1) cuando str == NULL .
La segunda parte dice, (si str apunta a algo) evalúa como verdadero (1) si el primer carácter es un carácter nulo ( '\0' ), lo que significa que es una cadena vacía.
Nota:
*str elimina la referencia del puntero y recupera el primer carácter. Esto es lo mismo que hacer str[0] .
!str significa que no hay memoria asignada a str . !*str significa que str apunta a una cadena vacía.
Antes de preguntar puedes hacer pequeñas pruebas.
#include <stdio.h> int main() { char *str = "test"; printf("%d\n",*str); printf("%c\n",*str); // str[0] printf("%d\n",str); if (!str || !*str) { printf("%s",str); } return 0; } significado de ! es negación. Excepto 0 , todos los valores son verdaderos para la condición if . Aquí, str y *str devuelven valores que no son 0 . Entonces, puedes hacer una inferencia.