【C言語】wchar.hで日本語や中国語、韓国語などのマルチバイト文字を扱う【標準ライブラリ】
C言語のwchar.hを使って出来ることと典型的な使い方
wchar.hとは
`wchar.h` は、C言語でワイド文字(wchar_t)を扱うためのヘッダーファイルです。 通常の `char` は1バイト単位の文字を扱うのに対し、`wchar_t` はワイド文字(多くの場合2バイト以上)を扱います。 これにより、日本語や中国語、韓国語などのマルチバイト文字を適切に処理できます。
wchar_tの定義
`wchar_t` は、標準ライブラリ `
#include <stdio.h>
#include <wchar.h>
int main() {
wchar_t wc = L'あ'; // ワイド文字のリテラルは L を前置する
wprintf(L"%lc\n", wc);
return 0;
}
このコードでは、日本語の文字「 あ 」を `wchar_t` 型で扱っています。
ワイド文字列の操作関数
`wchar.h` にはワイド文字列を操作するための関数が多数含まれています。 代表的なものを紹介します。
wcslen: ワイド文字列の長さを取得
#include <stdio.h>
#include <wchar.h>
int main() {
wchar_t str[] = L"こんにちは";
wprintf(L"長さ: %zu\n", wcslen(str));
return 0;
}
wcscpy: ワイド文字列のコピー
#include <stdio.h>
#include <wchar.h>
int main() {
wchar_t src[] = L"世界";
wchar_t dest[10];
wcscpy(dest, src);
wprintf(L"コピー後: %ls\n", dest);
return 0;
}
wcscat: ワイド文字列の連結
#include <stdio.h>
#include <wchar.h>
int main() {
wchar_t str1[20] = L"こんにちは";
wchar_t str2[] = L"世界";
wcscat(str1, str2);
wprintf(L"結合結果: %ls\n", str1);
return 0;
}
ワイド文字の入出力
`wprintf` や `wscanf` を使うと、ワイド文字列の入出力が可能です。
ワイド文字の標準入力
#include <stdio.h>
#include <wchar.h>
int main() {
wchar_t name[20];
wprintf(L"名前を入力してください: ");
wscanf(L"%ls", name);
wprintf(L"こんにちは、%lsさん!\n", name);
return 0;
}
ワイド文字を用いたファイル操作
`wchar.h` を使うと、ワイド文字の入出力を行うファイル処理も可能です。
ワイド文字のファイル出力
#include <stdio.h>
#include <wchar.h>
int main() {
FILE *file = _wfopen(L"test.txt", L"w"); // Windowsでは _wfopen を使用
if (file) {
fwprintf(file, L"ワイド文字の出力\n");
fclose(file);
}
return 0;
}
ワイド文字のファイル入力
#include <stdio.h>
#include <wchar.h>
int main() {
FILE *file = _wfopen(L"test.txt", L"r");
wchar_t buffer[100];
if (file) {
fgetws(buffer, 100, file);
wprintf(L"読み込んだ文字: %ls\n", buffer);
fclose(file);
}
return 0;
}
ワイド文字とマルチバイト文字の変換
`mbstowcs` と `wcstombs` を使うと、マルチバイト文字列とワイド文字列の相互変換が可能です。
マルチバイト文字列からワイド文字列への変換
#include <stdio.h>
#include <wchar.h>
#include <stdlib.h>
int main() {
char mbstr[] = "こんにちは";
wchar_t wstr[20];
mbstowcs(wstr, mbstr, 20);
wprintf(L"変換結果: %ls\n", wstr);
return 0;
}
ワイド文字列からマルチバイト文字列への変換
#include <stdio.h>
#include <wchar.h>
#include <stdlib.h>
int main() {
wchar_t wstr[] = L"世界";
char mbstr[20];
wcstombs(mbstr, wstr, 20);
printf("変換結果: %s\n", mbstr);
return 0;
}
まとめ
`wchar.h` を使うことで、C言語でワイド文字を扱うことができます。 文字列操作、入出力、ファイル処理、マルチバイト変換など、様々な場面で役立ちます。