I was looking at an example and I saw this:
char *str;
/* ... */
if (!str || !*str) {
return str;
}
Does it mean it's empty or something?
str is a char pointer. ! negates it. Basically, !str will evaluate to true (1) when str == NULL.
The second part is saying, (if str points to something) evaluate to true (1) if the first character is a null char ('\0') - meaning it's an empty string.
Note:
*str dereferences the pointer and retrieves the first character. This is the same as doing str[0].
!str means that there is no memory allocated to str. !*str means that str points to an empty string.
Before asking you can do small tests.
#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;
}
meaning of ! is negation. Except 0 every value is true for if condition. Here, str and *str return values that are not 0. So, you can make an inference.