wcscoll返回的结果与预期不同
考虑以下代码:wcscoll返回的结果与预期不同,c,widechar,C,Widechar,考虑以下代码: #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; } 但我希望它是-1,因为在波兰字母表中,ą正好在b之前。为什么它会回来?如果不是这样的话,你怎么能按字母顺
#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;
}
但我希望它是
-1
,因为在波兰字母表中,ą正好在b之前。为什么它会回来?如果不是这样的话,你怎么能按字母顺序比较单词呢?我在我的Linux机器上试过,得到了1
作为输出,和你的一样
然后我在/etc/locale.gen
编辑了受支持的区域设置,未注释的pl\u pl.UTF-8
(默认情况下未启用),运行sudo locale gen
,现在它给出了-4
,这是负数,正如预期的那样
结论是,您的系统配置不支持所选的区域设置。我在Linux机器上尝试了它,得到了
1
作为输出,与您的一样
然后我在/etc/locale.gen
编辑了受支持的区域设置,未注释的pl\u pl.UTF-8
(默认情况下未启用),运行sudo locale gen
,现在它给出了-4
,这是负数,正如预期的那样
结论是,您的系统配置不支持所选的区域设置。我在Linux机器上尝试了它,得到了
1
作为输出,与您的一样
然后我在/etc/locale.gen
编辑了受支持的区域设置,未注释的pl\u pl.UTF-8
(默认情况下未启用),运行sudo locale gen
,现在它给出了-4
,这是负数,正如预期的那样
结论是,您的系统配置不支持所选的区域设置。我在Linux机器上尝试了它,得到了
1
作为输出,与您的一样
然后我在/etc/locale.gen
编辑了受支持的区域设置,未注释的pl\u pl.UTF-8
(默认情况下未启用),运行sudo locale gen
,现在它给出了-4
,这是负数,正如预期的那样
结论是您的系统配置不支持所选的区域设置。检查
setlocale
的返回值;它可能无法识别您的国家/代码页字符串
。如果您在Windows上,请尝试传递
pl
而不是pl.UTF-8
检查setlocale
的返回值;它可能无法识别您的国家/代码页字符串
。如果您在Windows上,请尝试传递
pl
而不是pl.UTF-8
检查setlocale
的返回值;它可能无法识别您的国家/代码页字符串
。如果您在Windows上,请尝试传递
pl
而不是pl.UTF-8
检查setlocale
的返回值;它可能无法识别您的国家/代码页字符串
。如果您在Windows上,请尝试传递
pl
而不是pl\u pl。UTF-8
您的计算机上是否实际安装了波兰语言环境?排序
实用程序是否使用该区域设置正确排序?调试这类事情的第一步总是检查标准库返回值,在本例中,如果(setlocale(…)=NULL),则检查标准库返回值。@rici no实际上不检查。所以我猜这取决于操作系统?不,这是一个你在机器上安装了哪些地区的问题。因此,它比操作系统更依赖于配置,但我想这取决于你所说的操作系统依赖。@rici好吧,它也依赖于操作系统,因为该语言定义的唯一区域名称是“C”
。任何其他区域设置都依赖于操作系统。@rodrigo:技术上是正确的,但本例中的解决方案可能不是“更改您的操作系统”或“验证您的操作系统支持多个区域设置”。(我在没有质疑后一项检查的情况下对您的答案进行了投票:))您的机器上是否实际安装了波兰语言环境?排序
实用程序是否使用该区域设置正确排序?调试这类事情的第一步总是检查标准库返回值,在本例中,如果(setlocale(…)=NULL),则检查标准库返回值。@rici no实际上不检查。所以我猜这取决于操作系统?不,这是一个你在机器上安装了哪些地区的问题。因此,它比操作系统更依赖于配置,但我想这取决于你所说的操作系统依赖。@rici好吧,它也依赖于操作系统,因为该语言定义的唯一区域名称是“C”
。任何其他区域设置都依赖于操作系统。@rodrigo:技术上是正确的,但本例中的解决方案可能不是“更改您的操作系统”或“验证您的操作系统支持多个区域设置”。(我在没有质疑后一项检查的情况下对您的答案进行了投票:))您的机器上是否实际安装了波兰语言环境?排序
实用程序是否使用该区域设置正确排序?调试这类事情的第一步总是检查标准库返回值,在本例中,如果(setlocale(…)=NULL),则检查标准库返回值。@rici no实际上不检查。所以我猜这取决于操作系统?不,这是一个你在机器上安装了哪些地区的问题。因此,它比操作系统更依赖于配置,但我想这取决于你所说的操作系统依赖。@rici好吧,它也依赖于操作系统,因为该语言定义的唯一区域名称是“C”
。任何其他区域设置都依赖于操作系统。@rodrigo:技术上是正确的,但本例中的解决方案可能不是“更改您的操作系统”或“验证您的操作系统支持多个区域设置”。(我在没有质疑后一项检查的情况下对您的答案进行了投票:))您的机器上是否实际安装了波兰语言环境?排序
实用程序是否使用该区域设置正确排序?调试这类事情的第一步总是检查标准库返回值,在本例中,如果(setlocale(…)=NULL),则检查标准库返回值。@rici no实际上不检查。所以我猜这取决于操作系统?不,这是一个你在机器上安装了哪些地区的问题。所以它比操作系统更依赖配置,但我想这取决于你所说的操作系统依赖。@rici好吧,它是操作系统依赖的
158