2013-03-04 82 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