在Mac OS X 10.6.8我无法使用标准库中的wchar_t函数编译代码,直到我解决了这个问题。wcscoll函数被标记为中毒,我该怎么办?
的wcscoll功能,与一群人的共同:
inttypes.h:的#pragma GCC毒wcstoimax wcstoumax stdlib.h中:的#pragma GCC毒mbstowcs mbtowc wcstombs wctomb wchar.h:的#pragma GCC毒fgetws fputwc fputws fwprintf fwscanf mbrtowc mbsnrtowcs> mbsrtowcs putwc putwchar的swprintf swscanf vfwprintf vfwscanf vswprintf vswscanf vwprintf> vwscanf wcrtomb wcscat wcschr wcscmp wcscoll wcscpy wcscspn wcsftime wcsftime wcslcat> wcslcpy wcslen wcsncat WC sncmp wcsncpy wcsnrtombs wcspbrk wcsrchr wcsrtombs wcsspn wcsstr> wcstod wcstof wcstok wcstol wcstold wcstoll wcstoul 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 ...*/
}
}
我该如何解决这个问题? 我有点不情愿乱用标准库。但我猜我也许可以编译的GNU C库,如果苹果没有解决它?或者在图书馆中有其他合适的替代方案来处理宽字符(Utf-8)。
我正在移植一些古老的东西,所以我真的需要使用ncurses,并且为了使用ncurses,我需要宽字符! :)
编辑:标准includepath应该,因为我明白它是/ usr/include。我经历过的SDK的我有包括目录,并通过头文件的grep有揭示了同样的毒编译的,从http://opensource.apple.com/tarballs/Libc/做了最新的压缩包
编辑++
Hindsightly,这些pragma是出于某种原因,我正在寻找替代品,所以现在我正在尝试构建glibc,只是下载了,并且检查了没有任何“GCC毒性”杂记的头文件。
读了一点,在glibc的配置文件中,我想这不是一个简单的选择。我想我将不得不剖析一些与utf-8一起工作的东西,并在mac osX上使用ncurses来弄清楚。
这可能是我只是忽略了一个简单的解决方案。但ncurses退回到7位ascii,这是我的问题。我的目标是在使用ncurses时呈现utf-8语言特定的字符。我需要能够排序,因为格式是“propritary”与索引,分出系统调用排序记录是没有选择的。我还需要能够知道在某种字符串中有多少个代码点用于使用ncurses进行字段编辑,插入和删除显示字符。
谢谢!
你能粘贴一些代码段?以及错误代码。 –
你好。由于某种原因,该错误消失了,但该功能仍然会产生乱码!当我将“Øl”与“År”比较时,我得到1的结果,表示Øl大于År。我已经将区域设置LC_ALL设置为no_No-UTF-8。所以应该没有疑问。我已经添加了代码示例,出于神秘的原因开始工作,但产生了上面的错误结果。 – McUsr