Как проверить, пуста ли строка C

Я пишу очень маленькую программу на C, которая должна проверить, если определенная строка пустая. Ради этого вопроса я упростил свой код:

#include <stdio.h>
#include <string>

int main() {
  char url[63] = {''};
  do {
    printf("Enter a URL: ");
    scanf("%s", url);
    printf("%s", url);
  } while (/*what should I put in here?*/);

  return(0);
}

Я хочу, чтобы программа прекратила цикл, если пользователь просто нажимает enter, ничего не вводя.

10 ответов


поскольку строки в стиле C всегда заканчиваются нулевым символом (), вы можете проверить, пуста ли строка, написав

do {
   ...
} while (url[0] != '');

кроме того, вы можете использовать strcmp функция, которая является излишней, но может быть легче читать:

do {
   ...
} while (strcmp(url, ""));

отметим, что strcmp возвращает ненулевое значение, если строки различны, и 0, если они одинаковы, поэтому этот цикл продолжает цикл, пока строка не пуста.

надеюсь, что это помогает!


Если вы хотите проверить, пуста ли строка:

if (str[0] == '')
{
    // your code here
}

Если первый символ бывает '', то у вас есть пустая строка.

это то, что вы должны сделать:

do {
    /* 
    *   Resetting first character before getting input.
    */
    url[0] = '';

    // code
} while (url[0] != '');

Обычно говоря, вам будет трудно получить пустую строку здесь, учитывая %s пропускает пробельные символы (пробелы, табуляции, переводы строк)... но все равно,scanf() фактически возвращает количество успешных матчей...

из man-страницы:

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

Итак, если каким-то образом им удалось обойтись пустой строкой (ctrl+z например) вы можете просто проверить результат возврата.

int count = 0;
do {
  ...
  count = scanf("%62s", url);  // You should check return values and limit the 
                               // input length
  ...
} while (count <= 0)

обратите внимание, что вы должны проверить меньше, чем потому, что в Примере, который я дал, вы вернетесь -1, снова подробно в man-странице:

значение EOF возвращается, если конец ввода достигается до первого успешного преобразования или происходит сбой сопоставления. EOF также возвращается, если чтение возникает ошибка, в этом случае индикатор ошибки для потока (см. ferror(3)), а errno устанавливается укажет на ошибку.


strlen(url)

возвращает длину строки. Он подсчитывает все символы, пока не будет найден нулевой байт. В вашем случае проверьте его на 0.

или просто проверьте его вручную с помощью:

*url == ''

Вы можете проверить возвращаемое значение из scanf. Этот код будет просто сидеть там, пока не получит строку.

int a;

do {
  // other code
  a = scanf("%s", url);

} while (a <= 0);

вы можете попробовать так: -

if (string[0] == '') {
}

в вашем случае это может быть как:-

do {
   ...
} while (url[0] != '')

;


заменить на scanf() С fgets() ...

do {
    if (!fgets(url, sizeof url, stdin)) /* error */;
    /* ... */
} while (*url != '\n');

самый короткий способ сделать это было бы:

do {
    // Something
} while (*url);

по сути, *url вернет символ в первой позиции массива; так как строки C имеют нулевое завершение, если строка пуста, ее первой позицией будет символ '', в ASCII, стоимость которых составляет 0; так как логические операторы C обрабатывают каждое нулевое значение как false, этот цикл будет продолжаться, пока первая позиция строки не равна нулю, то есть пока строка не является пустой.

рекомендуемые показания, если вы хотите понять это лучше:


С помощью strtok () это можно сделать всего за одну строку: "if (strtok(s," \t")==NULL)". Например:

#include <stdio.h>
#include <string.h>

int is_whitespace(char *s) {
    if (strtok(s," \t")==NULL) {
        return 1;
    } else {
        return 0;
    }
}

void demo(void) {
    char s1[128];
    char s2[128];
    strcpy(s1,"   abc  \t ");
    strcpy(s2,"    \t   ");
    printf("s1 = \"%s\"\n", s1);
    printf("s2 = \"%s\"\n", s2);
    printf("is_whitespace(s1)=%d\n",is_whitespace(s1));
    printf("is_whitespace(s2)=%d\n",is_whitespace(s2));
}

int main() {
    char url[63] = {''};
    do {
        printf("Enter a URL: ");
        scanf("%s", url);
        printf("url='%s'\n", url);
    } while (is_whitespace(url));
    return 0;
}