【发布时间】:2015-08-13 11:13:20
【问题描述】:
考虑这段代码:
#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?如果不是这样,怎么能按字母顺序比较单词呢?
【问题讨论】:
-
波兰语语言环境是否实际安装在您的计算机上?
sort实用程序是否使用该语言环境正确排序?调试这类事情的第一步总是检查标准库的返回值,在这种情况下if(setlocale(...) = NULL)... -
@rici 不,实际上不是。所以我猜它依赖于操作系统?
-
不,这是您在机器上安装了哪些语言环境的问题。所以它比操作系统更依赖于配置,但我想这取决于你所说的依赖于操作系统的意思。
-
@rici 好吧,它也依赖于操作系统,因为该语言定义的唯一语言环境名称是
"C"。任何其他语言环境都取决于操作系统。 -
@rodrigo:技术上是正确的,但这种情况下的解决方案可能不是“更改您的操作系统”甚至“验证您的操作系统是否支持多个语言环境”。 (我赞成你的回答,没有对后者的检查提出质疑:))