Avviso C6401

L'uso di "nome funzione" nelle impostazioni locali predefinite per eseguire un confronto senza distinzione tra maiuscole e minuscole con la stringa costante 'string name'. Restituisce risultati imprevisti nelle impostazioni locali non in lingua inglese

Osservazioni:

Questo avviso indica che viene eseguito un confronto senza distinzione tra maiuscole e minuscole con una stringa costante quando si specificano le impostazioni locali predefinite. In genere, è stato previsto un confronto indipendente dalle impostazioni locali.

La conseguenza tipica di questo difetto è un comportamento errato nelle impostazioni locali non in lingua inglese. Ad esempio, in turco ".gif" non corrisponderà a ".GIF"; in Vietnamita" "LookUp" non corrisponderà a "LOOKUP".

La CompareString funzione accetta le impostazioni locali come argomento. Tuttavia, passando le impostazioni locali predefinite, ad esempio, la costante LOCALE_USER_DEFAULT, causerà comportamenti diversi in impostazioni locali diverse, a seconda dell'impostazione predefinita dell'utente. In genere, i confronti senza distinzione tra maiuscole e minuscole rispetto a una stringa costante devono essere eseguiti in un confronto indipendente dalle impostazioni locali.

Per eseguire un confronto indipendente dalle impostazioni locali usando CompareString in Windows XP, il primo parametro deve essere la costante LOCALE_INVARIANT, ad esempio per eseguire un test indipendente dalle impostazioni locali per verificare se pString corrisponde file1.gif ignorando le differenze maiuscole/minuscole, usare una chiamata come:

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

Nome dell'analisi del codice: DEFAULT_LOCALE_CONSTANT_STRING_COMPARISON

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 correggere questo avviso, usare il codice seguente:

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

Vedi anche

CompareString