Verschillen tussen tekenreeksfuncties
In dit onderwerp worden verschillen beschreven tussen tekenreeksfuncties die worden gebruikt bij het verwerken van Unicode- en tekensetgegevens. Deze functies hebben zowel Unicode- als Windows-codepagina implementaties ter ondersteuning van Unicode- en Windows-codepaginaparameters.
Voor de volgende tekenreeksfuncties is geen speciale opmerking vereist. De implementaties van de Unicode- en Windows-codepagina werken op dezelfde manier.
- CharNext-
- CharPrev-
- StringCchCat-, StringCchCatEx-
- StringCchCopy, StringCchCopyEx-
- StrCbLength-, StrCchLength-
De lengtewaarde die door een van de tekenreekslengtefuncties wordt opgehaald, is altijd gebaseerd op de normale tekenbreedte: 8 bits voor Windows-codepagina's, 16 bits voor Unicode. Deze waarde wordt vaak aangeduid als een 'aantal tekens'. Deze term is strikt juist omdat Windows-codepagina's die gebruikmaken van dubbel-bytetekensets (DBCSs) een aantal tekens met volledige breedte hebben die daadwerkelijk worden vertegenwoordigd door twee opeenvolgende bytes. Er ontstaat een vergelijkbare situatie voor surrogaten in Unicode.
De volgende tekenreeksfuncties zijn gevoelig voor de landinstelling van de huidige thread, afgeleid van de taal die de gebruiker selecteert in het Configuratiescherm. De lstrcmp-- en lstrcmpi-functies voeren geen bytevergelijkingen uit, zoals hun ANSI-namen, bijvoorbeeld strcmp-. In plaats daarvan vergelijken ze tekenreeksen op basis van de regels van de landinstelling.
De volgende functies worden geconverteerd tussen de OEM-tekenset en de huidige Windows-codepagina of Unicode, afhankelijk van welke versie wordt gebruikt:
De afdrukfuncties, bijvoorbeeld StringCbPrintf-, ondersteunen Unicode door de volgende nieuwe en gewijzigde gegevenstypen in hun indelingsspecificaties op te geven. Deze indelingsspecificaties zijn van invloed op de manier waarop de functies de bijbehorende invoerparameter interpreteren.
Indelingsspecificatie | Gegevenstype voor windows-codepaginaversie | Gegevenstype voor Unicode-versie |
---|---|---|
c | VERKOLEN | WCHAR |
C | WCHAR | VERKOLEN |
hc, hC | VERKOLEN | VERKOLEN |
hs, hS | LPSTR | LPSTR |
lc, lC | WCHAR | WCHAR |
ls, lS | LPWSTR | LPWSTR |
s | LPSTR | LPWSTR |
S | LPWSTR | LPSTR |
Het gegevenstype voor de uitvoertekst is altijd afhankelijk van de versie van de functie. Wanneer het gegevenstype van de invoerparameter en het gegevenstype van de uitvoertekst niet overeenkomen, voert de afdrukfunctie een conversie uit van Unicode naar de huidige Windows-codepagina, of omgekeerd, indien nodig.
Voor de Unicode-versie van de afdrukfuncties is de notatietekenreeks Unicode, net als de uitvoertekst.
Voorzichtigheid
Slechte bufferafhandeling wordt in veel beveiligingsproblemen betrokken die betrekking hebben op bufferoverschrijdingen. Zie Strsafe.h Reference. De functies die in Strsafe.h zijn gedefinieerd, bieden extra verwerking voor de juiste bufferafhandeling in uw code. Daarom zijn ze bedoeld om hun ingebouwde C/C++-tegenhangers en specifieke Microsoft Windows-implementaties te vervangen. Zie Beveiligingsoverwegingen: Internationale functiesvoor meer informatie.
Verwante onderwerpen