Поделиться через


C6401

Предупреждение C6401: использование <имя функции> на языке по умолчанию для сравнения без учета регистра со строкой константы <имя строки>. При применении для языков, отличных от английского, могут возникнуть непредвиденные результаты.

Данное предупреждение означает, что при сравнении строковой константы без учета регистра указан языковой стандарт по умолчанию; обычно в такой ситуации выполняется сравнение, независимое от языкового стандарта.

Как правило, в результате этой ошибки могут возникнуть неверные результаты для языков, отличных от английского. Например, в турецком языке ".gif" не то же самое, что ".GIF", во вьетнамском языке "LogIn" не совпадет с "LOGIN".

Функция CompareString принимает языковой стандарт в качестве аргумента, однако при передаче языкового стандарта по умолчанию, например константы LOCALE_USER_DEFAULT, для разных языковых стандартов будут получены разные результаты в зависимости от параметров пользователя по умолчанию. Обычно при сравнении строковых констант без учета регистра не следует также учитывать и языковой стандарт.

Чтобы выполнить независимое от языкового стандарта сравнение с помощью функции CompareString в Windows XP, следует передать в качестве первого параметра константу LOCALE_INVARIANT; например, чтобы проверить совпадение переменной pString со строкой "file1.gif" без учета регистра и языкового стандарта, можно использовать такой вызов:

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

Пример

Данное предупреждение создается в следующем коде:

include <windows.h>

int fd(char *ext)
{
  return (CompareString(LOCALE_USER_DEFAULT,
                        NORM_IGNORECASE,
                        ext, 
                        -1, 
                        TEXT("gif"),
                        -1) == 2);
}

Для устранения этого предупреждения используйте следующий код:

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

}

См. также

Ссылки

CompareString