【发布时间】:2012-01-17 01:14:21
【问题描述】:
我得到了这个学校项目。我必须按捷克规则按字母顺序对项目列表进行排序。在深入挖掘之前,我决定在 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));
在另一个函数中,我试图分配一个字符。像这样:
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 分配内存,或者我是否做得对。我用这两种方法都测试过,但都不起作用。
【问题讨论】:
-
Using Wide Character Constants with clang Gets "extraneous characters in wide character constant ignored" Error 的重复 - 重要的是 clang 还不支持这种行为。如果你真的需要,试试 GCC。
printf()有效,因为编译器不必关心字符串中的字节。当您的终端看到该序列时 它 会做正确的事情。 -
@CarlNorum 好吧,我只是用 gcc 和更简单的代码尝试了它,它没有打印任何东西。 pastebin.com/SZmTekYW