Freigeben über


Unterschiede bei der Zeichenfolgenfunktion

In diesem Thema werden unterschiede zwischen Zeichenfolgenfunktionen beschrieben, die bei der Behandlung von Unicode- und Zeichensatzinformationen verwendet werden. Diese Funktionen weisen sowohl Unicode- als auch Windows-Codepage Implementierungen auf, um Unicode- und Windows-Codeseitenparameter zu unterstützen.

Für die folgenden Zeichenfolgenfunktionen ist kein spezieller Kommentar erforderlich. Ihre Unicode- und Windows-Codeseitenimplementierungen funktionieren identisch.

Der von einer der Zeichenfolgenlängenfunktionen abgerufene Längenwert basiert immer auf der normalen Zeichenbreite: 8 Bits für Windows-Codeseiten, 16 Bit für Unicode. Dieser Wert wird häufig als "Anzahl von Zeichen" bezeichnet. Dieser Ausdruck ist streng korrekt, da Windows-Codeseiten, die Double-Byte-Zeichensätze verwenden, (DBCSs) einige Zeichen mit voller Breite aufweisen, die tatsächlich durch zwei aufeinander folgende Byte dargestellt werden. Eine ähnliche Situation entsteht für Surrogates in Unicode.

Die folgenden Zeichenfolgenfunktionen sind für das Gebietsschema des aktuellen Threads vertraulich, das von der Sprache abgeleitet wird, die der Benutzer in der Systemsteuerung auswählt. Die lstrcmp und lstrcmpi Funktionen führen keine Bytevergleiche wie ihre ANSI-Namenaken aus, z. B. strcmp. Stattdessen vergleichen sie Zeichenfolgen gemäß den Regeln des Gebietsschemas.

Die folgenden Funktionen konvertieren zwischen dem OEM-Zeichensatz und entweder der aktuellen Windows-Codeseite oder Unicode, je nachdem, welche Version verwendet wird:

Die Druckfunktionen, z. B. StringCbPrintf, unterstützen Unicode, indem sie die folgenden neuen und geänderten Datentypen in ihren Formatspezifikationen bereitstellen. Diese Formatspezifikationen wirken sich auf die Art und Weise aus, wie die Funktionen den entsprechenden Eingabeparameter interpretieren.

Formatspezifikation Datentyp für die Windows-Codeseitenversion Datentyp für Unicode-Version
c VERKOHLEN WCHAR
C WCHAR VERKOHLEN
hc, hC VERKOHLEN VERKOHLEN
hs, hS LPSTR LPSTR
lc, lC WCHAR WCHAR
ls, lS LPWSTR LPWSTR
s LPSTR LPWSTR
S LPWSTR LPSTR

 

Der Datentyp für den Ausgabetext hängt immer von der Version der Funktion ab. Wenn der Datentyp des Eingabeparameters und der Datentyp des Ausgabetexts nicht übereinstimmen, führt die Druckfunktion eine Konvertierung von Unicode zur aktuellen Windows-Codeseite aus, oder umgekehrt, wie erforderlich.

Für die Unicode-Version der Druckfunktionen ist die Formatzeichenfolge Unicode, wie der Ausgabetext.

Vorsicht

Eine schlechte Pufferbehandlung ist in vielen Sicherheitsproblemen mit Pufferüberläufen verbunden. Siehe Strsafe.h Reference. Die in Strsafe.h definierten Funktionen bieten zusätzliche Verarbeitung für die ordnungsgemäße Pufferverarbeitung in Ihrem Code. Aus diesem Grund sollen sie ihre integrierten C/C++-Entsprechungen sowie bestimmte Microsoft Windows-Implementierungen ersetzen. Weitere Informationen finden Sie unter Sicherheitsüberlegungen: Internationale Features.

 

Unicode in der Windows-API