使用C语言处理宽字符和search.h库时出现问题

时间:2013-11-20 15:15:15

标签: c search char wchar-t

我在使用search.h库时遇到问题,你看,ENTRY结构的属性“key”是char类型,但我需要使用wchar_t:

我有以下代码:

/* 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类型一起正常工作,并获得我提交的代码才能运行?

1 个答案:

答案 0 :(得分:3)

wcstombs不会在ENTRY结构的key字段中神奇地分配空间;你必须自己做:

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