Unicode Strlen эквивалент в MFC

Рассмотрим следующий простой код:

GetDlgItemText(IDC_EName,LPTSTR(cName),11);

k=strlen(cName);

Я хочу получить длину строки, которую пользователь вводит в поле редактирования, но у меня неправильный результат K=1 (всегда), потому что это строка в кодировке Юникод, в которой первый символ и второй - ноль, и я не знаю, как это исправить. Любые комментарии приветствуются. С Уважением,

2 ответа

Решение

Длина строки или, точнее, количество символов (не байтов), скопированных в выходной буфер, возвращается вашим вызовом GetDlgItemText(),

Вы также можете проверить длину строки напрямую. Поскольку вы используете ANSI/Unicode-совместимые макросы, такие как LPTSTR, вы должны использовать функцию strlen, совместимую с ANSI/Unicode: _tcslen (cName)

_tcslen() решает в strlen() при компиляции в ANSI/MBCS и в wcslen() при компиляции в Unicode.

Использование wcslen() http://msdn.microsoft.com/en-us/library/78zh94ax%28v=vs.80%29.aspx

Конечно, вы могли бы просто сделать:

k = GetDlgItemText(IDC_EName,LPTSTR(cName),11);

поскольку возвращаемое значение указывает количество символов, скопированных в буфер. http://msdn.microsoft.com/en-us/library/ms645489%28v=vs.85%29.aspx

Другие вопросы по тегам