Partager via


Différences entre les fonctions de chaîne

Cette rubrique décrit les différences entre les fonctions de chaîne utilisées dans la gestion des informations Unicode et de jeu de caractères. Ces fonctions ont des implémentations de pages de code Unicode et Windows pour prendre en charge les paramètres de page de code Unicode et Windows.

Les fonctions de chaîne suivantes ne nécessitent pas de commentaire spécial. Leurs implémentations de pages de code Unicode et Windows fonctionnent de manière identique.

La valeur de longueur récupérée par l’une des fonctions de longueur de chaîne est toujours basée sur la largeur de caractères normale : 8 bits pour les pages de code Windows, 16 bits pour Unicode. Cette valeur est souvent appelée « nombre de caractères ». Ce terme est strictement correct, car les pages de code Windows qui utilisent des jeux de caractères sur deux octets (DBCS) ont des caractères de pleine largeur qui sont en fait représentés par deux octets consécutifs. Une situation similaire se présente pour les substituts dans Unicode.

Les fonctions de chaîne suivantes sont sensibles aux paramètres régionaux du thread actif, dérivés de la langue que l’utilisateur sélectionne dans le Panneau de configuration. Les fonctions lstrcmp et lstrcmpi n’effectuent pas de comparaisons d’octets comme leurs noms ANSI, par exemple strcmp. Au lieu de cela, ils comparent les chaînes en fonction des règles des paramètres régionaux.

Les fonctions suivantes sont converties entre le jeu de caractères OEM et la page de code Windows actuelle ou Unicode, selon la version utilisée :

Les fonctions d’impression, par exemple StringCbPrintf, prennent en charge Unicode en fournissant les types de données nouveaux et modifiés suivants dans leurs spécifications de format. Ces spécifications de format affectent la façon dont les fonctions interprètent le paramètre d’entrée correspondant.

Spécification de format Type de données pour la version de la page de code Windows Type de données pour la version Unicode
c CHAR WCHAR
C WCHAR CHAR
hc, hC CHAR CHAR
hs, hS LPSTR LPSTR
lc, lC WCHAR WCHAR
ls, lS LPWSTR LPWSTR
s LPSTR LPWSTR
S LPWSTR LPSTR

 

Le type de données du texte de sortie dépend toujours de la version de la fonction. Lorsque le type de données du paramètre d’entrée et le type de données du texte de sortie ne sont pas d’accord, la fonction d’impression effectue une conversion d’Unicode vers la page de code Windows actuelle, ou inversement, selon les besoins.

Pour la version Unicode des fonctions d’impression, la chaîne de format est Unicode, tout comme le texte de sortie.

Attention

Une gestion médiocre de la mémoire tampon est impliquée dans de nombreux problèmes de sécurité qui impliquent des dépassements de mémoire tampon. Consultez Référence Strsafe.h. Les fonctions définies dans Strsafe.h fournissent un traitement supplémentaire pour une gestion appropriée de la mémoire tampon dans votre code. Pour cette raison, ils sont destinés à remplacer leurs équivalents C/C++ intégrés, ainsi que des implémentations Microsoft Windows spécifiques. Pour plus d’informations, consultez Considérations relatives à la sécurité : fonctionnalités internationales.

 

Unicode dans l'API Windows