C6400
avviso C6400: L'utilizzo di <nome funzione> per eseguire un confronto senza distinzione tra maiuscole e minuscole con la stringa costante <nome stringa> produce risultati imprevisti nelle impostazioni locali diverse dalle inglesi
L'avviso indica che un confronto senza distinzione tra maiuscole e minuscole con una stringa costante è in esecuzione in modo variabile in base alle impostazioni locali mentre, in apparenza, era previsto un confronto indipendente da tali impostazioni.
La conseguenza tipica di questo errore è il comportamento non corretto in impostazioni locali diverse dalle inglesi. In turco, ad esempio, ".gif" non corrisponderà a ".GIF" e in vietnamita "LogIn" non corrisponderà a "LOGIN".
Solitamente i confronti di stringa dovrebbero essere eseguiti con la funzione CompareString. Per eseguire un confronto indipendente dalle impostazioni locali su Windows XP, il primo parametro dovrebbe essere la costante LOCALE_INVARIANT.
Esempio
Il codice seguente genera questo avviso:
#include <windows.h>
int f(char *ext)
{
// code...
return (lstrcmpi(ext, TEXT("gif")) == 0);
}
Per risolvere il problema, eseguire un test indipendente dalle impostazioni locali per verificare se char *ext corrisponde a "gif" ignorando la distinzione tra maiuscole e minuscole, utilizzando il codice riportato di seguito.
#include <windows.h>
int f(char *ext)
{
// code...
return (CompareString(
LOCALE_INVARIANT,
NORM_IGNORECASE,
ext,
-1,
TEXT ("gif"),
-1) == CSTR_EQUAL);
}