Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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);
}