C6401
Aggiornamento: novembre 2007
C6401
avviso C6401: l'utilizzo di <nome funzione> in impostazioni internazionali predefinite per eseguire un confronto senza distinzione tra maiuscole e minuscole con la stringa costante <nome stringa> produce risultati imprevisti nelle impostazioni internazionali diverse dalle inglesi
L'avviso indica che è in esecuzione un confronto senza distinzione tra maiuscole e minuscole con una stringa costante con la specifica delle impostazioni internazionali predefinite, mentre era previsto un confronto indipendente da tali impostazioni.
La conseguenza tipica di questo errore è il comportamento non corretto in impostazioni internazionali diverse dalle inglesi. In turco, ad esempio, ".gif" non corrisponderà a ".GIF" e in vietnamita "LogIn" non corrisponderà a "LOGIN".
La funzione CompareString accetta un'impostazione internazionale come argomento. Tuttavia, il passaggio di un'impostazione internazionale predefinita, ad esempio la costante LOCALE_USER_DEFAULT, potrà provocare comportamenti diversi nelle diverse impostazioni internazionali, a seconda dell'impostazione predefinita dell'utente. Solitamente, un confronto senza distinzione tra maiuscole e minuscole con una stringa costante dovrebbe essere eseguito in un confronto indipendente dalle impostazioni internazionali.
Per eseguire un confronto indipendente dalle impostazioni internazionali mediante CompareString su Windows XP, come primo parametro è necessario utilizzare la costante LOCALE_INVARIANT. Per eseguire, ad esempio, un test indipendente dalle impostazioni internazionali per verificare se pString corrisponde a file1.gif ignorando le differenze tra maiuscole e minuscole, utilizzare una chiamata analoga alla seguente:
CompareString(LOCALE_INVARIANT,
NORM_IGNORECASE,
pString,
-1,
TEXT(“file1.gif”),
-1) == CSTR_EQUAL
Esempio
Il codice seguente genera questo avviso:
include <windows.h>
int fd(char *ext)
{
return (CompareString(LOCALE_USER_DEFAULT,
NORM_IGNORECASE,
ext,
-1,
TEXT("gif"),
-1) == 2);
}
Per risolvere il problema, utilizzare il codice seguente:
include <windows.h>
int f(char *ext)
{
return (CompareString(LOCALE_INVARIANT,
NORM_IGNORECASE,
ext,
-1,
TEXT("gif"),
-1) == 2);
}