2013-11-20 1 views
0

ENTRY 구조체의 "key"속성이 char 유형이지만 search.h 라이브러리 작업에 문제가 있습니다. wchar_t를 작동해야합니다와이드 문자와 search.h 라이브러리를 C 언어로 사용할 때의 문제

나는 다음과 같은 코드가 있습니다

/* search for the word in the dictionary and return the last one created */ 
static ENTRY *find(wchar_t *word) { 
    ENTRY e; 
    wcstombs(e.key, word, wcslen(word)+1); /* casting */ 
    /* e.key = (char)word; */ 
    return hsearch(e, FIND); 
} 

wchar_t *max_word = NULL; 
int i, max_size = 0; 
ENTRY *e; 
e = find(array[i]); 
if (e && ((int) e->data > max_size)) { 
    max_size = (int) e->data; 
    max_word = e->key; 
} 

버그가 어디 있는지 모르겠어요,하지만 난 위의 코드에서 정확하게 "세그먼트 위반"오류를 수신 계속.

그렇다면 search.h 라이브러리를 wchar_t 유형과 함께 올바르게 작동시키고 내가 제공 한 코드를 어떻게 얻을 수 있습니까?

답변

3

wcstombs 필드에 마법 공간으로 ENTRY 영역을 할당하지 않습니다. 당신은 자신을 그렇게해야 :

ENTRY e; 
size_t len = wcslen(word); 
size_t nbytes = wcstombs(NULL, word, 0) + 1; 
e.key = malloc(nbytes); 
// check for errors 
wcstombs(e.key, word, nbytes); 

나중에 free하는 것을 잊지 마십시오.

관련 문제