在MacOSX10.6.8上,在解决此问题之前,我无法使用标准库中的wchar_t函数编译代码。
wcscoll函数,以及其他一些函数:
inttypes.h:#pragma GCC毒药wcstoimax wcstoumax
stdlib.h:#布拉格GCC poison mbstowcs mbtowc wcstombs wctomb
wchar.h:#pragma GCC poison fgetws fputwc fputws fwprintf fwscanf mbsnrtowcs>mbsrtowcs putwc putwchar swprintf swscanf vfwprintf vfwscanf vswprintf vwscanf vwprintf>vwscanf wcrtomb wcscat wcschr wcscmp wcscoll wcscpy wcscspn wcsftime wcslcat>wcslcpy wcslen wcsncat wcsncmp wcsncpy wcsnrtombs wcspbrk wcsrchr wcsrtombs wcsspnwcsstr>wcstod wcstof wcstok wcstol wcstold wcstoll wcstoull wcstoull wcswidth wcsxfrm wcwidth>wmemchr wmemcmp wmemcpy wmemmove wmemset wprintf wscanf
#include <stdio.h>
#include <wchar.h>
#include <string.h>
#include <locale.h>
#include <stdlib.h>
extern int errno;
int main(void)
{
wchar_t pwcs1[3]={L"ØL"}, pwcs2[3]={L"Ål"};
size_t n;
(void)setlocale(LC_ALL, "");
/* set it to zero for checking errors on wcscoll */
errno = 0;
/*
** Let pwcs1 and pwcs2 be two wide character strings to
** compare.
*/
/* n = wcscmp(pwcs1, pwcs2); */
n = wcscoll(pwcs1, pwcs2);
/*
** If errno is set then it indicates some
** collation error.
*/
if (n < 0 ) {
printf("%s\n","Øl mindre en Ål" );
} else if (n == 0) {
printf("%s\n","Øl lik Ål" );
} else {
printf("%s\n","Øl større en Ål" );
}
if(errno != 0){
/* error has occurred... handle error ...*/
}
}
我该如何解决?
我有点不愿意把标准库弄乱。但我想我可以编译GNUClibrary,如果苹果没有一个补丁的话?或者在处理宽字符(Utf-8)的库中是否有其他合适的替代方案。
我正在移植一些古老的东西,所以我真的需要使用ncurses,为了使用ncurses,我需要宽字符!:)
编辑:标准includepath应该是/usr/include。我已经浏览了SDK的include目录,通过头文件的grep显示了与http://opensource.apple.com/tarballs/Libc/
编辑++
事后诸葛亮,那些pragmas是有原因的,我在寻找替代方案,所以现在,我正在尝试构建glibc,刚刚下载,我已经检查了头部,这些头部没有任何“GCC毒药”pragmas。
读了一点glibc的配置文件,我想这不是一个简单的选择。我想我将不得不剖析一些与utf-8一起工作的东西,并在mac osX上使用ncurses来找出如何做到这一点。
可能是我忽略了一个简单的解决方案。但是ncurses依赖于7位ascii,这是我的问题。我的目标是在使用ncurses时呈现utf-8语言特定的字符。我需要能够排序,因为格式是“PROPARID”与索引,拨出系统调用排序记录是没有选择的。我还需要知道一个字符串中有多少代码点用于字段编辑、使用ncurses从显示中插入和删除字符。
谢谢!
最佳答案
到目前为止,ICU库看起来很有前途:我想我会用ICU库寻求一个解决方案,据我所知,它是Mac Os X附带的。http://icu-project.org/apiref/icu4c/
关于c - wcscoll函数被标记为中毒,该怎么办?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14333295/