Avviso C6400

Uso di 'function name' per eseguire un confronto senza distinzione tra maiuscole e minuscole rispetto alla stringa costante 'string name'. Restituisce risultati imprevisti nelle impostazioni locali non in lingua inglese

Osservazioni:

Questo avviso indica che un confronto senza distinzione tra maiuscole e minuscole con una stringa costante viene eseguito in modo dipendente dalle impostazioni locali. Sembra che fosse 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".

I confronti tra stringhe devono in genere essere eseguiti con la CompareString funzione . Per eseguire un confronto indipendente dalle impostazioni locali in Windows XP, il primo parametro deve essere la costante LOCALE_INVARIANT.

Nome dell'analisi del codice: LOCALE_DEPENDENT_CONSTANT_STRING_COMPARISON

Esempio

Il codice seguente genera questo avviso:

#include <windows.h>
int f(char *ext)
{
  // code...
  return (lstrcmpi(ext, TEXT("gif")) == 0);
}

Per correggere questo avviso, eseguire un test indipendente dalle impostazioni locali per verificare se char *ext corrisponde a "gif" ignorando le differenze maiuscole/minuscole, usare il codice seguente:

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

Vedi anche

CompareString