Рассмотрим этот код:wcscoll возвращает другой результат, чем ожидалось
#include <wchar.h>
#include <locale.h>
#include <stdio.h>
int main(void) {
setlocale(LC_ALL, "pl_PL.UTF-8");
printf("%d\n", wcscoll(L"ą", L"b"));
return 0;
}
Выход на
158
Но я бы ожидать, что это будет -1
, поскольку это как раз перед Ь в польском алфавите , Почему он вернулся? И если не так, как можно сравнивать слова в алфавитном порядке?
Является ли местный язык польского языка на вашей машине? Утилита 'sort' правильно сортируется с этой локалью? Первый шаг в отладке такого рода - всегда проверять стандартные возвращаемые значения библиотеки, в этом случае 'if (setlocale (...) = NULL) ...' – rici
@rici нет, на самом деле это не так. Итак, я думаю, что это зависит от ОС? – Dunno
Нет, это вопрос о том, какие локали вы установили на машине. Таким образом, он больше зависит от конфигурации, чем ОС, но я думаю, это зависит от того, что вы подразумеваете под OS-зависимым. – rici