0

考虑这段代码:

#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,因为 ą 就在波兰字母表中的 b 之前。为什么返回 158?如果不是这样,怎么能按字母顺序比较单词呢?

4

2 回答 2

2

我在我的 Linux 机器上尝试了它,我得到1了输出,就像你的一样。

然后我编辑了支持的语言环境/etc/locale.gen,未注释pl_PL.UTF-8(默认情况下未启用),运行sudo locale-gen,现在它给出了-4,即为负,正如预期的那样。

结论是您的系统配置不支持所选的语言环境。

于 2015-05-30T17:31:22.653 回答
1

setlocale检查;的返回值 它可能无法识别您的国家/地区/代码页字符串。

MS 语言环境名称使用破折号,而不是下划线。如果您使用的是 Windows,请尝试通过pl-PL而不是pl_PL.UTF-8.

于 2015-05-30T17:31:27.320 回答