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