Anzahl der Zeichen in LPCTSTR ermitteln
-
Ich möchte in einem Fenster Text ausgeben, mithilfe von TextOut(..). Dieser steht in einer Zeichenkette vom Typ LPCTSTR. Und da TextOut als letzten Parameter nach der Anzahl der Zeichen fragt, komme ich da etwas in Bedrängnis, weil sizeof() da nicht funktioniert, oder genauer gesagt, mir nicht die Anzahl der Zeichen, sondern die Größe der Variablen zurückgibt
Kann mir jemand einen Tip geben, wie ich die Anzahl der Zeichen in dieser Zeichenkette ermitteln kann?
Vielen Dank schonmal
-
Normalerweise sollte strlen reichen.
Aber bin mir nicht sicher, wie sie sich bei Unicode verhält.
Dann vielleicht generell _tcslen.
-
Ja du hattest Recht, strlen war völlig ausreichend. Und ich hab gedacht es würde bestimmt etwas komplizierter sein...vielen Dank für die schnell Hilfe. Ich sollte mir angewöhnen, immer vor der Mittagspause zu posten, dann ist nachher die Antwort schon da

-
Lieber _tcslen

-
Was verstehst Du denn unter "Anzahl der Zeichen"? Laut Doku sollst Du die Anzahl der BYTE oder WORD übergeben.
Dazu musst Du "_tcslen" verwenden (auf keinen Fall _tcsclen!).
-
Mit Anzahl der Zeichen meine ich die Anzahl aller Buchstaben, Leerzeichen, Sonderzeichen usw. Ich habe durch Probieren herausgefunden, dass der Integerwert, den man übergibt, die Anzahl der Zeichen, die tatsächlich dargestellt werden festlegt. Das deckt sich meines Erachtens mit der Dokumentation, da dort steht, dass hier jeder character ein byte groß ist

Wir haben also das gleiche gemeint, hab mich nur etwas seltsam ausgedrückt
In meine Falle funktionieren sowohl strlen als auch _tcslen einwandfrei. Ich hab mal in der Doku nachgesehen, aber aus der werd ich nicht schlau. Ich vermute einfach mal aufgrund des Wenigen, was ich verstanden habe, dass man für verschiedene Typen von Strings verschiedene Funktionen braucht? Könnte mir vielleicht jemand der Unterschied erklären? Das wär sehr nett
-
In der MS-Welt gibt es drei Arten von Strings:
- ANSI/ASCII
- MBCS
- UNICODEFür diese drei gibt es fünf verschiedene Funktionen um die Länge rauszufinden:
- ANSI/ASCII: strlen
- MBCS: strlen / _mbslen / _mbstrlen
- UNICODE: wcslenDas was Du meintest ist die Anzahl der "Code values" (also bei ANSI/ASCII/MBCS die Anzahl der *char*; für UNICODE wäre dies die Anzahl der *wchar_t*).
Die _mb*-Funktionen beachten noch die multi-byte-sequences und zählen diese code values nur als *ein* Zeichen, obwohl es mehrere *char* sind. Dies macht aber IMHO keinen Sinn, da das gleiche auch für UNICODE zutreffen würde und hier gibt es kein pedant, bzw. mit composing/combining characters ist dies wirklich sinnlos...
Siehe:
www.unicode.org
-
Danke, du hast Licht ins Dunkel gebracht. Ich glaub damit wären meine Fragen zu diesem Thema erstmal erschöpft
