Коллега записал образец о том, как создать захват клавиатуры низкого уровня, который будет использоваться с WPF.
http://blogs.vertigo.com/personal/ralph/Blog/Lists/Posts/Post.aspx?ID=8
Учитывая этот код:
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)
будут обнаруживать пустую строку .
Это поможет определить, является ли массив символов пустым. Это, вероятно, также самый быстрый.
if(text[0] == '\0') {}
Это также будет быстро, если массив text
пуст. Если он содержит символы, сначала нужно посчитать все символы в нем.
if(strlen(text) == 0) {}
Зависит от того, содержит ли ваш массив строку с завершающим нулем. Если так, тогда
if(text[0] == '\0') {}
должно быть достаточно.
Изменить: Другой метод был бы ...
if (strcmp(text, "") == 0)
, который потенциально менее эффективен, но ясно выражает ваше намерение.
Второй метод почти наверняка будет самым быстрым способом проверить, пуста ли строка с завершающим нулем, поскольку он включает одно чтение и одно сравнение. В этом случае, конечно, нет ничего плохого в этом подходе, так что вы можете использовать его.
Третий метод не проверяет, пуст ли массив символов; он гарантирует, что массив символов пуст.
Второй - самый быстрый. Использование strlen
будет закрытым , если строка действительно пуста, но strlen
всегда будет перебирать каждый символ строки, поэтому, если это , нет пусто, он будет делать гораздо больше, чем вам нужно.
Как упоминал Джеймс, третий вариант стирает строку перед проверкой, поэтому проверка всегда будет успешной, но будет бессмысленной.