2010-06-07 18 views
2

Je transfère une bibliothèque de char à TCHAR. Le paramètre count de ce fragment, selon MSDN, est le nombre de caractères multi-octets, pas le nombre d'octets. alors, ai-je bien compris? Mes propriétés de projet dans VC9 disent 'utiliser un jeu de caractères Unicode' et je pense que c'est correct, mais je ne suis pas en quoi cela affecte mon paramètre de compte.Fonctions de sécurité tchar - paramètre de comptage pour les constantes UTF-8

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

« pris en charge sur les plates-formes Windows, _mbsncmp et _mbsnbcmp sont des versions multi-octets de strncmp. _mbsncmp comparera au plus compter les caractères multi-octets et _mbsnbcmp comparera à la plupart des octets de comptage. Ils utilisent tous deux la page de code multi-octets.

_tcsnccmp et _tcsncmp sont respectivement les fonctions génériques correspondantes pour _mbsncmp et _mbsnbcmp, _tccmp est équivalent à _tcsnccmp. "

Une question similaire est _tcslen vs _tcsclen.

Répondre

4

Oui, vous comprenez bien.

La question, cependant, est de savoir pourquoi vous le portez sur TCHAR - quelque chose qui est sensible à _UNICODE define. Pourquoi ne pas utiliser UTF8 et char *?

+0

cela ne va-t-il pas à l'encontre du point? Je ne porte sur tchar que parce que c'est ce que le code environnant utilise. Ai-je le choix ici? –

+2

Il y a une croyance sérieuse que TCHAR est un effort malavisé qui devrait être abandonné. Voir http://stackoverflow.com/questions/1049947/should-utf-16-be-considered-harmful –

+0

Importation d'une méthode d'analyse, écrite en 1995, pour fonctionner sur basic_string . Je commence à penser que cela pourrait être une logique d'analyse syntaxique qui sera sensible aux caractères multi-octets. Je ne pense pas que passer des tableaux d'octets UTF-8 à cette fonction sera très joli. –

2

TCHAR est un type qui est soit 8 ou 16 bits selon que _UNICODE est défini. Mais UTF-8 toujours utilise des unités de code de 8 bits, donc en utilisant TCHAR est stupide. Utilisez simplement char.

TCHAR est liée à l'existence de deux versions de l'API Windows: les fonctions «A» qui utilisent des pages de code 8 bits héritées et les fonctions «W» qui utilisent UTF-16. UTF-8 is not supported. Vous pouvez utiliser UTF-8 sous Windows en convertissant explicitement vos chaînes UTF-8 en UTF-16 pour les appels API, mais vous ne recevrez aucune aide de _UNICODE ou de TCHAR.