Partilhar via


Diferenças de função de cadeia de caracteres

Este tópico descreve as diferenças entre as funções de cadeia de caracteres usadas no tratamento de informações Unicode e conjunto de caracteres. Essas funções têm Unicode e páginas de código do Windows implementações para oferecer suporte a parâmetros de página de código Unicode e do Windows.

As seguintes funções de cadeia de caracteres não requerem comentários especiais. Suas implementações de página de código Unicode e Windows funcionam de forma idêntica.

O valor de comprimento recuperado por uma das funções de comprimento de cadeia de caracteres é sempre baseado na largura normal de caracteres: 8 bits para páginas de código do Windows, 16 bits para Unicode. Este valor é muitas vezes referido como uma "contagem de caracteres". Este termo é estritamente correto porque as páginas de código do Windows que usam conjuntos de caracteres de byte duplo (DBCSs) têm alguns caracteres de largura total que são realmente representados por dois bytes consecutivos. Uma situação semelhante ocorre para substitutos em Unicode.

As seguintes funções de cadeia de caracteres são sensíveis à localidade do thread atual, derivadas do idioma selecionado pelo usuário no Painel de Controle. As funções lstrcmp e lstrcmpi não executam comparações de bytes como seus homônimos ANSI, por exemplo, strcmp. Em vez disso, eles comparam cadeias de caracteres de acordo com as regras da localidade.

As seguintes funções convertem entre o conjunto de caracteres OEM e a página de código atual do Windows ou Unicode, dependendo da versão usada:

As funções de impressão, por exemplo, StringCbPrintf, suportam Unicode fornecendo os seguintes tipos de dados novos e alterados em suas especificações de formato. Estas especificações de formato afetam a forma como as funções interpretam o parâmetro de entrada correspondente.

Especificação do formato Tipo de dados para a versão da página de código do Windows Tipo de dados para a versão 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

 

O tipo de dados para o texto de saída sempre depende da versão da função. Quando o tipo de dados do parâmetro de entrada e o tipo de dados do texto de saída não concordam, a função de impressão executa uma conversão de Unicode para a página de código atual do Windows, ou vice-versa, conforme necessário.

Para a versão Unicode das funções de impressão, a cadeia de caracteres de formato é Unicode, assim como o texto de saída.

Atenção

O manuseio deficiente do buffer está implicado em muitos problemas de segurança que envolvem saturações de buffer. Consulte de referência do Strsafe.h . As funções definidas em Strsafe.h fornecem processamento adicional para manipulação adequada de buffer em seu código. Por esta razão, destinam-se a substituir os seus homólogos C/C++ incorporados, bem como implementações específicas do Microsoft Windows. Para obter mais informações, consulte Considerações de segurança: recursos internacionais.

 

Unicode na API do Windows