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

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

char text[50];

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

или

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

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

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

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

вопрос задан 25.11.2009
ZPS
638 репутация

6 ответов


  • 60 рейтинг

    Учитывая этот код:

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

    Затем следует вопрос по этому коду:

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

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

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

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

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

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

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

    ответ дан bbum, с репутацией 155344, 25.11.2009
  • 18 рейтинг

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

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

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

    Редактировать: другой метод будет. , ,

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

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

    ответ дан Parappa, с репутацией 5916, 25.11.2009
  • 7 рейтинг

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

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

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

    if(strlen(text) == 0) {}
    
    ответ дан Peter Stuifzand, с репутацией 4235, 25.11.2009
  • 4 рейтинг

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

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

    ответ дан James McNellis, с репутацией 282034, 25.11.2009
  • 4 рейтинг

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

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

    ответ дан Graeme Perrow, с репутацией 35364, 25.11.2009
  • 2 рейтинг
    if(text[0] == '\0') {}
    

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

    ответ дан Tony, с репутацией 21, 10.04.2016