C LANGUAGE TECHNOLOGY

【C言語】ワイド文字の使い方【日本語】

悩んでいる人

C言語でワイド文字の使い方を教えて!

こういった悩みにお答えします.

本記事の信頼性

  • リアルタイムシステムの研究歴12年.
  • 東大教員の時に,英語でOSの授業.
  • 2012年9月~2013年8月にアメリカのノースカロライナ大学チャペルヒル校コンピュータサイエンス学部2021年の世界大学学術ランキングで20位)で客員研究員として勤務.C言語でリアルタイムLinuxの研究開発
  • プログラミング歴15年以上,習得している言語: C/C++Solidity/Vyper,Java,Python,Ruby,HTML/CSS/JS/PHP,MATLAB,Assembler (x64,ARM).
  • 東大教員の時に,C++言語で開発した「LLVMコンパイラの拡張」,C言語で開発した独自のリアルタイムOS「Mcube Kernel」GitHubにオープンソースとして公開

こういった私から学べます.

【C言語】ワイド文字

ワイド文字とは,主にC/C++言語における文法において,一般的に従来の8ビット文字よりも大きなサイズを持つコンピュータ文字のデータ型です.

ワイド文字は日本語を含む多くの言語をサポートしています.

ワイド文字の例は以下になります.

C言語のprintf関数でワイド文字を表示できます.

また,C言語には,ワイド文字のFILEストリームで出力するwprintf関数があります.

wprintf関数を利用する注意点は,一度FILEストリームの入出力単位(バイト文字またはワイド文字)が決まると変更することはできず, ストリームがクローズされるまで保持されることです.

つまり,同じコードでprintf関数(バイト文字の出力)とwprintf関数(ワイド文字の出力)を両方とも利用できないことに注意して下さい.

上記の注意点は,fwide関数(FILEストリームの入出力単位を設定または取得する関数)や以下の解説記事で紹介されています.

ワイド文字の使い方

ワイド文字の使い方を紹介します.

printf関数のみを利用するコードは以下になります.

また,setlocale関数の第2引数に"ja_JP.UTF-8"とUnicodeであることを明示的に設定しています.

実行時に正常に日本語が表示されない場合,「setlocale(LC_ALL, "");」と第2引数を空文字列にしてみて下さい.

実行結果は以下になります.

Linuxでは「sizeof(wchar_t) = 4」になる理由は,設定した文字コードがUnicodeのUTF-32(4バイト)になるからです.

Visual Studioでの実行結果は以下になります.

Linuxでは「sizeof(wchar_t) = 4」でしたが,Visual Studioでは「sizeof(wchar_t) = 2」になることに注意して下さい.

この理由は,WindowsのUnicodeは,UTF-16(2バイト)になるからです.

wprintf関数のみを利用するコードは以下になります.

wprintf関数では,引数の文字列はワイド文字列になること,char型の文字列の書式指定子は%sではなく%hsになることに注意して下さい.

実行結果は同様なので省略します.

まとめ

C言語でワイド文字の使い方を紹介しました.

具体的には,printf/wprintf関数で日本語を表示する方法を解説しました.

C言語を独学で習得することは難しいです.

私にC言語の無料相談をしたいあなたは,公式LINE「ChishiroのC言語」の友だち追加をお願い致します.

私のキャパシティもあり,一定数に達したら終了しますので,今すぐ追加しましょう!

友だち追加

独学が難しいあなたは,元東大教員がおすすめするC言語を学べるオンラインプログラミングスクール5社で自分に合うスクールを見つけましょう.後悔はさせません!

-C LANGUAGE, TECHNOLOGY
-, , , , , , ,