无法将宽字符分配到宽字段。

时间:2011-12-09 19:28:03

标签: c widechar

我接受了这个学校项目。我必须按捷克规则按字母顺序对项目列表进行排序。在我深入挖掘之前,我决定在16 x 16矩阵上测试它,所以我这样做了:

typedef struct {    
wint_t **field;
}LIST;

...

setlocale(LC_CTYPE,NULL);

....

list->field=(wint_t **)malloc(16*sizeof(wint_t *));
for(int i=0;i<16;i++)  
list->field[i]=(wint_t *)malloc(16*sizeof(wint_t));

在另一个函数中,我试图分配一个char。像这样:

sorted->field[15][15] = L'C';
wprintf(L"%c\n",sorted->field[15][15]);

一切都很好。字符打印。但是当我尝试将其改为

sorted->field[15][15] = L'Č';

它说:宽字符常量中的多余字符被忽略。 (Xcode)跳过打印部分。 main.c文件是UTF-8。如果我试着打印这个:

printf("ěščřžýááíé\n");

按照书面形式打印出来。我不确定我是否应该使用wint_t或wchar_t分配mem,或者我是否正确。我用两者测试了它,但它们都没有用。

1 个答案:

答案 0 :(得分:0)

clang似乎支持使用\x表示法将任意字节序列输入到宽字符串中:

wchar_t c = L'\x2126';

这是在没有通知的情况下编译的。

编辑:根据我在wikipedia about wide characters找到的内容,以下内容适用于我:

#include <stdio.h>
#include <wchar.h>
#include <stdlib.h>
#include <locale.h>

int main(void)
{
    setlocale(LC_ALL,"");
    wchar_t myChar1 = L'\x2126';
    wchar_t myChar2 = 0x2126;  // hexadecimal encoding of char Ω using UTF-16
    wprintf(L"This is char: %lc \n",myChar1);
    wprintf(L"This is char: %lc \n",myChar2);
}

并在终端中打印好个字符。确保您的终端能够解释utf-8字符。