C6401

Actualización: noviembre 2007

C6401

Advertencia C6401: Se utilizará <nombre de función> en una configuración regional predeterminada para realizar una comparación con distinción entre mayúsculas y minúsculas con la cadena de constante <nombre de cadena>. Se proporcionarán resultados inesperados en las configuraciones regionales que no estén en inglés

Esta advertencia indica que se está efectuando una comparación que no distingue entre mayúsculas y minúsculas con una cadena de caracteres al especificar la configuración regional predeterminada; normalmente se pretende utilizar 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, "Inicio de sesión" no coincidirá con "INICIO DE SESIÓN".

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

Para realizar una comparación independiente de la configuración regional usando 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 a fin de determinar si pString coincide con file1.gif sin distinguir entre mayúsculas y minúsculas, utilice una llamada como la siguiente:

CompareString(LOCALE_INVARIANT,
              NORM_IGNORECASE,
              pString,
              -1,
              TEXT(“file1.gif”),
              -1) == CSTR_EQUAL 

Ejemplo

El código siguiente genera esta advertencia:

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:

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

}

Vea también

Referencia

CompareString