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 Unicode e implementações de página de código do 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.
- CharNext
- CharPrev
- StringCchCat, StringCchCatEx
- StringCchCopy, StringCchCopyEx
- StrCbLength, StrCchLength
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 conjuntos de caracteres de bytes duplos (DBCSs) 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çõeslstrcmplstrcmp enão executam comparações de bytes como seus homônimos ANSI, por exemplo, de 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:
- charToOem
- CharToOemBuff
- OemToCharBuff
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 | QUEIMAR | WCHAR |
C | WCHAR | QUEIMAR |
hc, hC | QUEIMAR | QUEIMAR |
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 do 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 sobrecargas de buffer. Consulte de referência strsafe.h. As funções definidas no Strsafe.h fornecem processamento adicional para tratamento de buffer adequado em seu código. Por esse motivo, eles se destinam a substituir seus equivalentes C/C++ internos, bem como implementações específicas do Microsoft Windows. Para obter mais informações, consulte Considerações sobre segurança: recursos internacionais.
Tópicos relacionados
-
Unicode no da API do Windows