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 de conjunto de caracteres e Unicode. Essas funções têm implementações de página de códigoUnicode e Windows para dar suporte a parâmetros de página de código Unicode e Windows.

As funções de cadeia de caracteres a seguir não exigem 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 da cadeia de caracteres é sempre baseado na largura normal do caractere: 8 bits para páginas de código do Windows, 16 bits para Unicode. Esse valor geralmente é chamado de "contagem de caracteres". Este termo está estritamente correto porque as páginas de código do Windows que usam DBCSs ( conjuntos de caracteres de byte duplo ) têm alguns caracteres de largura total que são representados por dois bytes consecutivos. Uma situação semelhante surge para substitutos no Unicode.

As funções de cadeia de caracteres a seguir são sensíveis à localidade do thread atual, derivada 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 xarás ANSI, por exemplo, strcmp. Em vez disso, eles comparam cadeias de caracteres de acordo com as regras da localidade.

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

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

Especificação de 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 do 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.

Cuidado

A má manipulação de buffer está implicada em muitos problemas de segurança que envolvem estouros de buffer. Consulte Referência de Strsafe.h. As funções definidas em Strsafe.h fornecem processamento adicional para tratamento de buffer adequado em seu código. Por esse motivo, eles se destinam a substituir seus equivalentes internos do C/C++, 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