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

Коллега записал образец о том, как создать захват клавиатуры низкого уровня, который будет использоваться с WPF.

http://blogs.vertigo.com/personal/ralph/Blog/Lists/Posts/Post.aspx?ID=8

59
задан ZPS 25 November 2009 в 00:12
поделиться

5 ответов

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

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) будут обнаруживать пустую строку .

74
ответ дан 24 November 2019 в 18:22
поделиться

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

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

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

if(strlen(text) == 0) {}
7
ответ дан 24 November 2019 в 18:22
поделиться

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

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

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

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

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

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

19
ответ дан 24 November 2019 в 18:22
поделиться

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

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

4
ответ дан 24 November 2019 в 18:22
поделиться

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

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

4
ответ дан 24 November 2019 в 18:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: