10

私は本を​​読んでいます: C: In a Nutshell 、およびワイド文字について説明しているセクションCharacter Setsを読んだ後、私はこのプログラムを書きました:

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

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

次に、gcc を使用してコンパイルしましたが、gcc から次の警告が表示されました。

main.c:7:15: 警告: 16 進エスケープ シーケンスが範囲外です [デフォルトで有効]

そして、プログラムは文字 α (Unicode は U+03B1) を出力しません。これは、私が望んでいたことです。

文字αを印刷するようにプログラムを変更するにはどうすればよいですか?

4

3 に答える 3

7
wchar_t wc = L'\x3b1';

wchar_t 変数を U+03B1 に初期化する正しい方法です。L プレフィックスは、wchar_t リテラルを指定するために使用されます。あなたのコードは char リテラルを定義しているため、コンパイラは警告を発しています。

印刷時に目的の文字が表示されないという事実は、ローカル環境のコンソール設定にかかっています。

于 2012-10-21T08:19:13.007 に答える
-1

試しL'\x03B1'てみてください。問題が解決するかもしれません。疑問がある場合は、試すことができます:

'\u03b1' to initialize.
于 2012-10-21T08:16:10.297 に答える