Безопасные функции Tchar-параметр подсчета для константов UTF-8
Вопрос
Я переношу библиотеку из Чар в Тар. Параметр подсчета этого фрагмента, согласно MSDN, - это количество мультибитных символов, а не количество байтов. Итак, я понял это правильно? Мои свойства проекта в VC9 говорят «Использовать набор символов Unicode», и я думаю, что это правильно, но я не то, как это влияет на мой параметр графа.
_tcsncmp(access, TEXT("ftp"), 3); //or do i want _tcsnccmp?
«Поддерживается только на платформах Windows, _MBSNCMP и _MBSNBCMP являются многобитные версии STRNCMP.
_tcsnccmp и _tcsncmp являются соответствующими общими функциями для _mbsncmp и _mbsnbcmp соответственно. _tccmp эквивалентен _tcsnccmp. "
Аналогичный вопрос - _tcslen vs _tcsclen.
Решение
Да, вы понимаете это правильно.
Вопрос, однако, заключается в том, почему вы переносите его в Tchar - что -то, что чувствительно к определению _unicode.
Почему бы не использовать UTF8 и char*?
Другие советы
TCHAR
это тип, который составляет 8 или 16 бит в зависимости от того, независимо от того, _UNICODE
определено. Но UTF-8 всегда использует 8-битные кодовые блоки, поэтому используя TCHAR
глупый. Просто используйте char
.
TCHAR
привязан к существованию двух версий API Windows: «A» функции, которые используют устаревшие 8-битные кодовые страницы, и функции «W», которые используют UTF-16. UTF-8 не поддерживается. Анкет Вы можете использовать UTF-8 в Windows, явно преобразив свои строки UTF-8 в UTF-16 для вызовов API, но вы не получите никакой помощи от _UNICODE
или же TCHAR
.