Mac OS X 10.6.8이 문제를 해결하기 전까지 표준 라이브러리의 wchar_t 함수를 사용하여 코드를 컴파일 할 수 없습니다.wcscoll 함수가 중독 된 것으로 표시되어 있는데 어떻게해야합니까?
inttypes.h :의 #pragma GCC 독 stdlib.h wcstoumax wcstoimax : 서로 다른 무리
wcscoll 함수의 #pragma GCC 독 mbstowcs 함수를 mbtowc는 wcstombs가 을 wctomb를 wchar.h : GCC의 #pragma 독 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 라이브러리를 컴파일 할 수 있다고 생각합니다. Apple이 그것을 수정하지 않았다면? 아니면 넓은 문자 (Utf-8)를 다루기위한 라이브러리 사이에 다른 적합한 대안이 있는가?
나는 고대의 무언가를 이식하고 있으므로, 실제로는 ncurses를 사용해야하고, ncurses를 사용하려면 넓은 문자가 필요합니다! :)
편집 : 표준 includepath는/usr/include로 이해해야합니다. http://opensource.apple.com/tarballs/Libc/에서 최신 타르볼을했던 것처럼, 나는 SDK의 내가 가진의 포함 디렉토리를하고 있고, 헤더 파일을 통해 GREP 같은 독 프라그의이 밝혀
편집 ++
이 Hindsightly, 그 프라그 마를는 거기에 이유가 있고, 나는 대안을 찾고 있었으므로 지금은 다운로드 한 glibc를 만들려고 노력하고있다. 나는 "GCC poison"pragma가없는 헤더를 검사했다.
glibc의 구성 파일에서 조금 읽었을 때 쉬운 옵션이 아닌 것 같습니다. 나는 utf-8에서 작동하는 무언가를 해부해야하고 Mac OS X에서 ncurses를 사용하여 방법을 알아낼 것이라고 생각한다.
나는 쉬운 해결책이 간과 될 수도 있습니다. 그러나 ncurses는 7 비트 아스키로 돌아가며 이것이 내 문제입니다. 제 목표는 ncurses를 사용하면서 utf-8 언어의 특정 문자를 렌더링하는 것입니다. 형식을 "propritary"(인덱싱 포함)로 정렬 할 수 있어야합니다. 정렬 레코드에 대한 시스템 호출을 포기하는 것은 옵션이 아닙니다. 또한 필드 편집, 삽입 및 ncurses가있는 디스플레이의 문자 제거와 같은 종류의 문자열에 얼마나 많은 코드 포인트가 있는지 알 수 있어야합니다.
감사합니다.
당신이 몇 가지 코드 조각을 붙여 넣을 수와까지, ICU 라이브러리 솔루션을 추구 생각 ? 오류 코드는 물론 오류 코드도 표시됩니다. –
안녕하세요. 웬일인지, 그 오류는 단지 사라졌다. 그러나 기능은 아직도 단지 횡설수설을 만든다!"Øl"을 "År"과 비교하면 Øl이 År보다 큰 것을 나타내는 1의 결과를 얻습니다. 로케일 LC_ALL을 no_No-UTF-8로 설정했습니다. 그래서 의심의 여지가 없어야합니다. 신비한 이유로 코드 예제를 추가했지만 위의 결과는 이상합니다. – McUsr