2012-10-21 100 views
7

我讀的書:C:簡而言之和閱讀部分字符集,其中談到了寬字符後,我寫了這個程序:如何初始化wchar_t變量?

#include <stdio.h> 
#include <stddef.h> 
#include <wchar.h> 

int main() { 
    wchar_t wc = '\x3b1'; 
    wprintf(L"%lc\n", wc); 
    return 0; 
} 

然後我用gcc編譯它但海灣合作委員會給了我這樣的警告:

的main.c:7:15:警告:十六進制轉義序列超出範圍[默認啓用]

程序不輸出字符α(其Unicode碼是U + 03B1),這正是我想要的。

如何更改打印字符α的程序?

+1

'wchar_t的WC = L '\ x03b1';'消除了警告,但它仍然無法打印的字母。 – 2012-10-21 08:11:36

+1

我真正想要的不是消除警告,而是得到正確的答案。 :-( –

+0

你要打印到哪裏?如果一個終端,你的終端設置了什麼編碼轉換? –

回答

5

這對我的作品

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

int main(void) { 
    wchar_t wc = L'\x3b1'; 

    setlocale(LC_ALL, "en_US.UTF-8"); 
    wprintf(L"%lc\n", wc); 
    return 0; 
} 
+1

這也適用於我。 :-) –

+0

您可以通過LC_CTYPE更改LC_ALL (此類別適用於字符分類和轉換,以及多字節和寬字符) –

+0

這不適用於Windows;區域設置名稱不同,並且控制檯默認不會使用UTF-8。 – rubenvb

0

嘗試L'\x03B1'它可能只是解決您的問題。如果你懷疑是你可以嘗試:

'\u03b1' to initialize. 
+0

不。我試過這個,但是沒有工作。 – 2012-10-21 08:18:47

+0

前面的零不是必須的。十六進制轉義序列可以包含任何正數的十六進制數字 –

+0

@ H2C03什麼都不起作用請儘量準確 –

5
wchar_t wc = L'\x3b1'; 

是初始化一個wchar_t的變量,以U + 03B1的正確方法。 L前綴用於指定wchar_t文字。你的代碼定義了一個char文字,這就是編譯器警告的原因。

打印時看不到所需字符的事實取決於本地環境的控制檯設置。

+0

Emmmm,如何設置我的控制檯? –

+1

我已經不知道,你沒有說明你在使用什麼操作系統,而且你也沒有問過這個問題,你問過如何初始化變量。 –

+0

我使用的是Ubuntu linux,你能在計算機上得到正確的結果嗎?我只是在想,問題是由初始化引起的,我以前從來沒有想過這個環境。 –