Ваш вопрос кажется ясным, но код, показанный вместе с ним, делает его менее понятным:
if (name == NULL) { // how can I check here if char name is empty?
*name = "ERROR";
}
Это неопределенное поведение. Если name
действительно равно NULL
, вы не можете разыменовать его, но это то, что вы делаете в следующей строке.
Конечно, способ, которым вы вызываете эту функцию, этоникогда не может случиться.Вы называете это так:
store_stuff(&name, &age);
, а оператор &
всегда вычисляет действительный, не NULL
указатель.
В общем, неясно, чтоВы имеете в виду под "пустым".Для указателей есть специальное значение NULL
, которое означает «этот указатель ни на что не указывает».Но это не означает «пустой», оно по-прежнему имеет значение: NULL
.
В контексте строк пустое значение будет иметь четко определенное значение.Поскольку строки в C определены как последовательность символов, заканчивающаяся байтом \0
, строка empty имеет \0
в качестве самого первого символа.Таким образом, предполагая, что char *str
является строкой, вы можете проверить наличие пустой строки, например
if (*str == 0)
или даже более короткой:
if (!*str)
Имейте в виду, что это приведет к неопределенному поведению, если str
равно NULL
(не указывает на любую строку ).Если вы ничего не знаете об этом и должны проверить, что он действительно указывает на строку, и эта строка не пуста, вы можете написать что-то вроде
if (!str || !*str)
, что примерно эквивалентно IsNullOrEmpty()
метод для строки .NET ...