Leer en inglés

Compartir a través de


Advertencia C6401

Con "nombre de función" en una configuración regional predeterminada para realizar una comparación sin distinción entre mayúsculas y minúsculas con la cadena constante "nombre de cadena". produce resultados inesperados en configuraciones regionales distintas del inglés.

Comentarios

Esta advertencia indica que se realiza una comparación sin distinción entre mayúsculas y minúsculas con una cadena constante al especificar la configuración regional predeterminada. Normalmente, se pretendía una comparación independiente de la configuración regional.

La consecuencia típica de este defecto es un comportamiento incorrecto en configuraciones regionales de habla no inglesa. Por ejemplo, en turco, ".gif" no coincidirá con ".GIF"; en vietnamita, "LookUp" no coincidirá con "LOOKUP".

La función CompareString toma una configuración regional como argumento; sin embargo, pasar una configuración regional predeterminada, por ejemplo, la constante LOCALE_USER_DEFAULT, provocará comportamientos diferentes en distintas configuraciones regionales, según el valor predeterminado del usuario. Normalmente, las comparaciones sin distinción entre mayúsculas y minúsculas con una cadena de constantes se deben realizar en una comparación independiente de la configuración regional.

Para realizar una comparación independiente de la configuración regional mediante CompareString en Windows XP, el primer parámetro debe ser la constante LOCALE_INVARIANT; por ejemplo, para realizar una prueba independiente de la configuración regional para si pString coincide con file1.gif omitiendo las diferencias en mayúsculas y minúsculas, use una llamada como:

C++
CompareString(LOCALE_INVARIANT,
              NORM_IGNORECASE,
              pString,
              -1,
              TEXT("file1.gif"),
              -1) == CSTR_EQUAL

Nombre de análisis de código: DEFAULT_LOCALE_CONSTANT_STRING_COMPARISON

Ejemplo

El código siguiente genera esta advertencia:

C++
include <windows.h>

int fd(char *ext)
{
  return (CompareString(LOCALE_USER_DEFAULT,
                        NORM_IGNORECASE,
                        ext,
                        -1,
                        TEXT("gif"),
                        -1) == 2);
}

Para corregir esta advertencia, utilice el código siguiente:

C++
include <windows.h>
int f(char *ext)
{
  return (CompareString(LOCALE_INVARIANT,
                        NORM_IGNORECASE,
                        ext,
                        -1,
                        TEXT("gif"),
                        -1) == 2);
}

Consulte también

CompareString