2013-01-15 23 views
1

在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进行字段编辑,插入和删除显示字符。

谢谢!

+0

你能粘贴一些代码段?以及错误代码。 –

+0

你好。由于某种原因,该错误消失了,但该功能仍然会产生乱码!当我将“Øl”与“År”比较时,我得到1的结果,表示Øl大于År。我已经将区域设置LC_ALL设置为no_No-UTF-8。所以应该没有疑问。我已经添加了代码示例,出于神秘的原因开始工作,但产生了上面的错误结果。 – McUsr

回答

相关问题