Как я могу проверить, указывает ли переменная char * на пустую строку? - PullRequest
46 голосов
/ 01 ноября 2011

Как я могу проверить, указывает ли переменная char* на пустую строку?

Ответы [ 7 ]

85 голосов
/ 01 ноября 2011

Проверьте, является ли первый символ '\ 0'. Вы также должны, вероятно, проверить, является ли ваш указатель NULL.

char *c = "";
if ((c != NULL) && (c[0] == '\0')) {
   printf("c is empty\n");
}

Вы можете поместить обе эти проверки в функцию, чтобы ее было удобно и легко использовать повторно.

Edit: В операторе if это можно прочитать следующим образом: «Если c не ноль и первый символ массива символов« c »не равен« \ 0 »или нулю, то ...».

&& просто объединяет два условия. Это как сказать:

if (c != NULL) { /* AND (or &&) */
    if (c[0] == '\0') {
        printf("c is empty\n");
    }
}

Возможно, вы захотите получить хорошую книгу по программированию на C, если она вам не понятна. Я мог бы порекомендовать книгу под названием «Язык программирования Си».

Самая короткая версия, эквивалентная приведенной выше, будет:

if (c && !c[0]) {
  printf("c is empty\n");
}
10 голосов
/ 01 ноября 2011

Мой предпочтительный метод:

if (*ptr == 0) // empty string

Возможно, более распространенный:

if (strlen(ptr) == 0) // empty string
9 голосов
/ 01 ноября 2011

Проверьте указатель на NULL, а затем с помощью strlen проверьте, возвращает ли он 0.
NULL проверка важна, потому что передача указателя NULL на strlen вызывает UndefinedПоведение .

6 голосов
/ 01 ноября 2011

Пустая строка имеет один нулевой байт. Итак, тест if (s[0] == (char)0)

2 голосов
/ 01 ноября 2011

Я бы предпочел использовать функцию strlen, поскольку библиотечные функции реализованы наилучшим образом.

Итак, я бы написал, если (strlen (p) == 0) // Пустая строка

1 голос
/ 16 октября 2013

Дайте ему шанс:

Попробуйте получить строку с помощью функции gets (string) затем проверьте условие, как будто (строка [0] == '\ 0')

0 голосов
/ 01 ноября 2011
if (!*ptr) { /* empty string  */}

аналогично

if (*ptr)  { /* not empty */ }
...