Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
'dize adı' sabit dizesiyle karşılaştırıldığında büyük/küçük harfe duyarsız bir karşılaştırma gerçekleştirmek için varsayılan yerel ayarda 'işlev adı' kullanma. İngilizce olmayan yerel ayarlarda beklenmeyen sonuçlar verir
Açıklamalar
Bu uyarı, varsayılan yerel ayar belirtilirken sabit bir dizeye büyük/küçük harfe duyarlı olmayan bir karşılaştırma yapıldığını gösterir. Genellikle yerel ayardan bağımsız bir karşılaştırma amaçlanmıştır.
Bu hatanın tipik sonucu, İngilizce konuşmayan yerel ayarlarda yanlış davranıştır. Örneğin, Türkçe'de ".gif" ".GIF" ile eşleşmez; Vietnamca'da "LookUp", "ARA" ile eşleşmiyor.
İşlev CompareString , bağımsız değişken olarak bir yerel ayar alır; ancak varsayılan yerel ayarı (örneğin sabit LOCALE_USER_DEFAULT) geçirmek, kullanıcının varsayılan ayarına bağlı olarak farklı yerel ayarlarda farklı davranışlara neden olur. Genellikle, sabit bir dizeye karşı büyük/küçük harfe duyarsız karşılaştırmalar yerel ayardan bağımsız bir karşılaştırmada gerçekleştirilmelidir.
Windows XP'de kullanarak CompareString yerel ayardan bağımsız bir karşılaştırma gerçekleştirmek için, ilk parametre sabit LOCALE_INVARIANTolmalıdır; örneğin, büyük/küçük harf farklarını yoksayarak file1.gif eşleşip eşleşmediğine pString yönelik yerel ayardan bağımsız bir test gerçekleştirmek için aşağıdaki gibi bir çağrı kullanın:
CompareString(LOCALE_INVARIANT,
NORM_IGNORECASE,
pString,
-1,
TEXT("file1.gif"),
-1) == CSTR_EQUAL
Kod analizi adı: DEFAULT_LOCALE_CONSTANT_STRING_COMPARISON
Örnek
Aşağıdaki kod bu uyarıyı oluşturur:
include <windows.h>
int fd(char *ext)
{
return (CompareString(LOCALE_USER_DEFAULT,
NORM_IGNORECASE,
ext,
-1,
TEXT("gif"),
-1) == 2);
}
Bu uyarıyı düzeltmek için aşağıdaki kodu kullanın:
include <windows.h>
int f(char *ext)
{
return (CompareString(LOCALE_INVARIANT,
NORM_IGNORECASE,
ext,
-1,
TEXT("gif"),
-1) == 2);
}