Безопасные функции tchar - параметр count для констант UTF-8 - PullRequest
2 голосов
/ 08 июня 2010

Я портирую библиотеку из char в TCHAR.Параметр count этого фрагмента, согласно MSDN, представляет собой количество многобайтовых символов, а не количество байтов.Итак, я понял это правильно?В свойствах моего проекта в VC9 написано «использовать набор символов Юникода», и я думаю, что это правильно, но я не так влияю на мой параметр подсчета.

_tcsncmp(access, TEXT("ftp"), 3); //or do i want _tcsnccmp?

«Поддерживаются только на платформах Windows, _mbsncmp и _mbsnbcmpМногобайтовые версии strncmp. _mbsncmp будет сравнивать самое большее количество многобайтовых символов, а _mbsnbcmp будет сравнивать самое большее количество байтов.Они оба используют текущую многобайтовую кодовую страницу.

_tcsnccmp и _tcsnccmp - соответствующие общие функции для _mbsncmp и _mbsnbmp,соответственно. _tccmp эквивалентно _tcsnccmp. "

Аналогичный вопрос: _tcslen vs _tcsclen.

Ответы [ 2 ]

4 голосов
/ 08 июня 2010

Да, вы правильно поняли.

Однако вопрос в том, почему вы переносите его на TCHAR - что-то, что чувствительно к _UNICODE define.

Почему бы не использовать UTF8 и char *?

2 голосов
/ 09 июня 2010

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.

...