Compartir a través de


Diferencias de función de cadena

En este tema se describen las diferencias entre las funciones de cadena que se usan para controlar la información de unicode y del juego de caracteres. Estas funciones tienen implementaciones de página de códigos Unicode y Windows para admitir parámetros de página de códigos Unicode y Windows.

Las siguientes funciones de cadena no requieren un comentario especial. Sus implementaciones de página de códigos Unicode y Windows funcionan de forma idéntica.

El valor de longitud recuperado por una de las funciones de longitud de cadena siempre se basa en el ancho de caracteres normal: 8 bits para páginas de códigos de Windows, 16 bits para Unicode. Este valor se conoce a menudo como "recuento de caracteres". Este término es estrictamente correcto porque las páginas de códigos de Windows que usan juegos de caracteres de doble byte (DBCS) tienen algunos caracteres de ancho completo representados realmente por dos bytes consecutivos. Surge una situación similar para los suplentes en Unicode.

Las siguientes funciones de cadena son sensibles a la configuración regional del subproceso actual, derivada del idioma que el usuario selecciona en el Panel de control. Las funciones lstrcmp y lstrcmpi no realizan comparaciones de bytes como sus nombres ANSI, por ejemplo, strcmp. En su lugar, comparan cadenas según las reglas de la configuración regional.

Las siguientes funciones convierten entre el juego de caracteres OEM y la página de códigos actual de Windows o Unicode, en función de la versión que se use:

Las funciones de impresión, por ejemplo, StringCbPrintf, admiten Unicode proporcionando los siguientes tipos de datos nuevos y modificados en sus especificaciones de formato. Estas especificaciones de formato afectan a la forma en que las funciones interpretan el parámetro de entrada correspondiente.

Especificación de formato Tipo de datos para la versión de página de códigos de Windows Tipo de datos para la versión 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

 

El tipo de datos del texto de salida siempre depende de la versión de la función. Cuando el tipo de datos del parámetro de entrada y el tipo de datos del texto de salida no están de acuerdo, la función de impresión realiza una conversión de Unicode a la página de códigos de Windows actual, o viceversa, según sea necesario.

Para la versión Unicode de las funciones de impresión, la cadena de formato es Unicode, al igual que el texto de salida.

Precaución

El control deficiente del búfer está implicado en muchos problemas de seguridad que implican saturaciones del búfer. Consulte la referencia de Strsafe.h. Las funciones definidas en Strsafe.h proporcionan procesamiento adicional para el control adecuado del búfer en el código. Por este motivo, están diseñados para reemplazar sus homólogos integrados de C/C++, así como implementaciones específicas de Microsoft Windows. Para obtener más información, vea Consideraciones de seguridad: Características internacionales.

 

Unicode en la API de Windows