2013-03-04 41 views
2

如何将非ASCII字符分配给宽字符并将其打印到控制台?此代码下不起作用:将非ASCII字符分配给宽字符并使用printf进行打印

#include <stdio.h> 
int main(void) 
{ 
    wchar_t wc = L'ć'; 
    printf("%lc\n", wc); 
    printf("%ld\n", wc); 
    return 0; 
} 

输出:

263 
Press [Enter] to close the terminal ... 

我使用的是Windows 7的

+2

你没有将它分配给一个字符,你将它分配给一个wchar_t – Mike 2013-03-04 16:42:10

+1

['wchar_t'不是ASCII]。(http://en.wikipedia.org/wiki/Wide_character) – m0skit0 2013-03-04 16:43:07

+0

如何分配字符'ć'到任何字符,int,变量并打印它是正确的?它有可能吗? – balky 2013-03-04 16:51:44

回答

1

我想你的来电printf()失败,并在errno返回«非法字节序列»错误的,至少是在这里发生的事情在MacOS X与上面的示例代码(并且如果使用wprintf()而不是printf())。

#include <stdio.h> 
#include <stdlib.h> 
#include <locale.h> 
int main(void) 
{ 
    wchar_t wc = L'ć'; 

    setlocale(LC_ALL, ""); 
    printf("%lc\n", wc); 

    return 0; 
} 

目前还不清楚你是什么样的平台/编译器,所以因人而异:对于我来说,当我以使其停止使用C语言环境默认调用之前调用setlocale(LC_ALL, "");printf()工作。

+0

我也可以在windows上工作 – balky 2013-03-04 17:12:40

+0

Windows 7上的MinGW GCC – balky 2013-03-04 17:14:05

2

您应该使用wprintf打印宽字符串MinGW的GCC:

​​
+0

好吧,但它仍然不打印任何字符 – balky 2013-03-04 16:49:33

+0

@balky - 那么你使用的控制台不能正确显示宽字符 – Mike 2013-03-04 16:50:56

+0

你的意思是Windows控制台窗口?我不明白它 – balky 2013-03-04 16:55:02

0

使用wprintf(“%lc \ n”,wc);你会得到你想要的输出

+0

不起作用 – balky 2013-03-04 16:57:25

+0

你真的想要什么产出? – 2013-03-05 01:26:08

相关问题