Condividi tramite


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);
}

Vedere anche

Riferimenti

CompareString