Лучший способ проверить, не массив символов

Какой самый надежный способ проверить, является ли массив символов пустым?

char text[50];

if(strlen(text) == 0) {}

или

if(text[0] == '\0') {}

или мне нужно сделать

 memset(text, 0, sizeof(text));
 if(strlen(text) == 0) {}

Каков наиболее эффективный способ сделать это?

Ответ 1

С учетом этого кода:

char text[50];
if(strlen(text) == 0) {}

Далее задан вопрос об этом коде:

 memset(text, 0, sizeof(text));
 if(strlen(text) == 0) {}

Я чувствую запах путаницы. В частности, в этом случае:

char text[50];
if(strlen(text) == 0) {}

... содержимое text[] будет неинициализировано и undefined. Таким образом, strlen(text) вернет результат undefined.

Самый простой/быстрый способ гарантировать, что строка C инициализируется пустой строкой, - просто установить первый байт в 0.

char text[50];
text[0] = 0;

С этого момента обе команды strlen(text) и очень быстрые, но не простые как t27 будут обнаруживать пустую строку.

Ответ 2

Зависит от того, удерживает ли ваш массив строку с нулевым завершением. Если это так, то

if(text[0] == '\0') {}

должно быть достаточно.

Изменить: другой метод будет...

if (strcmp(text, "") == 0)

который потенциально менее эффективен, но четко выражает ваши намерения.

Ответ 3

Это будет работать, чтобы найти массив символов. Вероятно, это также самый быстрый.

if(text[0] == '\0') {}

Это также будет быстро, если массив text пуст. Если он содержит символы, ему необходимо сначала подсчитать все символы в нем.

if(strlen(text) == 0) {}

Ответ 4

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

Третий метод не проверяет, является ли массив символов пустым; это гарантирует, что массив символов пуст.

Ответ 5

Второй - самый быстрый. Использование strlen будет закрыто , если строка действительно пуста, но strlen будет всегда перебирать каждый символ строки, поэтому, если она не пуста, она будет работать гораздо больше, чем вы вам нужно это сделать.

Как отметил Джеймс, третий вариант вытирает строку перед проверкой, поэтому проверка всегда будет успешной, но это будет бессмысленно.

Ответ 6

if (text[0] == '\0')
{
    /* Code... */
}

Используйте это, если вы программируете для микроконтроллеров с небольшим пространством на флэш-памяти и/или оперативной памяти. Вы потратите на a lot больше флэш-памяти, используя strlen, чем на проверку первого байта.

Приведенный выше пример является самым быстрым и требует меньше вычислений.

Ответ 7

if (!*text) {}  

Выше разыменовывает указатель "текст" и проверяет, равен ли он нулю. альтернативно:

if (*text == 0) {}