TCHAR-Sicherheitsfunktionen-Grafparameter für UTF-8-Konstanten
Frage
Ich portiere eine Bibliothek von STOR nach TCHR. Der Zählparameter dieses Fragments ist laut MSDN die Anzahl der Multibyte -Zeichen, nicht die Anzahl der Bytes. Also, habe ich das richtig verstanden? Meine Projekteigenschaften in VC9 sagen "Verwenden Sie den Unicode -Zeichensatz" und ich denke, das ist richtig, aber ich bin nicht so, wie sich dies auf meinen Zählparameter auswirkt.
_tcsncmp(access, TEXT("ftp"), 3); //or do i want _tcsnccmp?
"Nur auf Windows -Plattformen unterstützt, _mbsncmp und _mbsnbcmp sind Multibyte -Versionen von STRNCMP.
_tcsnccmp und _tcsncmp sind die entsprechenden generischen Funktionen für _mbsncmp bzw. _mbsnbcmp. _tccmp entspricht _tcsnccmp. "
Eine ähnliche Frage ist _tcslen vs _tcsclen.
Lösung
Ja, du machst es richtig.
Die Frage ist jedoch, warum Sie es auf TCHRE verändern - etwas, das empfindlich gegenüber _unicode definiert ist.
Warum nicht UTF8 und Char*verwenden?
Andere Tipps
TCHAR
ist ein Typ, der entweder 8 oder 16 Bit ist, je nachdem, ob _UNICODE
ist definiert. Aber UTF-8 stets Verwendet 8-Bit-Code-Einheiten TCHAR
ist albern. Benutz einfach char
.
TCHAR
ist an die Existenz von zwei Versionen der Windows-API gebunden: "A" -Funktionen, die Legacy 8-Bit-Code-Seiten verwenden, und "W" -Funktionen, die UTF-16 verwenden. UTF-8 wird nicht unterstützt. Sie können UTF-8 unter Windows verwenden, indem Sie Ihre UTF-8-Zeichenfolgen explizit für API-Anrufe in UTF-16 konvertieren. Sie erhalten jedoch keine Hilfe von _UNICODE
oder TCHAR
.