Skillnader i strängfunktion

Det här avsnittet beskriver skillnader mellan strängfunktioner som används vid hantering av Unicode- och teckenuppsättningsinformation. Dessa funktioner har både Unicode- och Windows-kodsida implementeringar för att stödja Unicode- och Windows-kodsidasparametrar.

Följande strängfunktioner kräver ingen särskild kommentar. Implementeringar av Unicode- och Windows-kodsidor fungerar på samma sätt.

Längdvärdet som hämtas av en av stränglängdsfunktionerna baseras alltid på normal teckenbredd: 8 bitar för Windows-kodsidor, 16 bitar för Unicode. Det här värdet kallas ofta för "antal tecken". Den här termen är strikt korrekt eftersom Windows-kodsidor som använder teckenuppsättningar med dubbla byte (DBCS) har vissa tecken med full bredd som faktiskt representeras av två på varandra följande byte. En liknande situation uppstår för surrogater i Unicode.

Följande strängfunktioner är känsliga för språkvarianten för den aktuella tråden, som härleds från det språk som användaren väljer i Kontrollpanelen. Funktionerna lstrcmp och lstrcmpi utför inte bytejämförelser som deras ANSI-namnekes, till exempel strcmp. I stället jämför de strängar enligt reglerna för nationella inställningar.

Följande funktioner konverterar mellan OEM-teckenuppsättningen och antingen den aktuella Windows-kodsidan eller Unicode, beroende på vilken version som används:

Utskriftsfunktionerna, till exempel StringCbPrintf, stöder Unicode genom att tillhandahålla följande nya och ändrade datatyper i deras formatspecifikationer. Dessa formatspecifikationer påverkar hur funktionerna tolkar motsvarande indataparameter.

Formatspecifikation Datatyp för Windows-kodsidans version Datatyp för Unicode-version
c RÖDING WCHAR
C WCHAR RÖDING
hc, hC RÖDING RÖDING
hs, hS LPSTR LPSTR
lc, lC WCHAR WCHAR
ls, lS LPWSTR LPWSTR
s LPSTR LPWSTR
S LPWSTR LPSTR

 

Datatypen för utdatatexten beror alltid på funktionens version. När datatypen för indataparametern och datatypen för utdatatexten inte godkänns utför utskriftsfunktionen en konvertering från Unicode till den aktuella Windows-kodsidan, eller vice versa, efter behov.

För Unicode-versionen av utskriftsfunktionerna är formatsträngen Unicode, liksom utdatatexten.

Försiktighet

Dålig bufferthantering är inblandad i många säkerhetsproblem som omfattar buffertöverskridanden. Se Strsafe.h-referens. Funktionerna som definieras i Strsafe.h ger ytterligare bearbetning för korrekt bufferthantering i koden. Därför är de avsedda att ersätta sina inbyggda C/C++-motsvarigheter samt specifika Microsoft Windows-implementeringar. Mer information finns i säkerhetsöverväganden: Internationella funktioner.

 

Unicode i Windows API-