下式给出:
wchar_t* str = L"wide chars";
如何在c(不是c ++)中一次提取一个字符?
例如,我试过
for (int i = 0; i < wcslen(str); i++) {
printf("%wc\n", str[i]);
}
但只给了我胡言乱语
答案 0 :(得分:1)
在Linux(Ubuntu)上,以下工作正常:
#include <locale.h>
#include <stdio.h>
#include <string.h>
#include <wchar.h>
int main() {
/* See below */
setlocale(LC_ALL, "");
wchar_t* str = L"日本語";
for (int i = 0; i < wcslen(str); i++) {
printf("U+%04x: %lc\n", str[i], str[i]);
}
return 0;
}
setlocale
电话很重要。没有它,程序将在C语言环境中执行,其中没有宽字符到多字节转换,这对于%lc
格式代码是必需的。 setlocale(LC_ALL, "");
导致进程的语言环境设置为各种环境变量定义的默认值。