【C言語】wchar.hで日本語や中国語、韓国語などのマルチバイト文字を扱う【標準ライブラリ】

【C言語】wchar.hで日本語や中国語、韓国語などのマルチバイト文字を扱う【標準ライブラリ】

C言語のwchar.hの使い方と例

C言語のwchar.hを使って出来ることと典型的な使い方

wchar.hとは

`wchar.h` は、C言語でワイド文字(wchar_t)を扱うためのヘッダーファイルです。 通常の `char` は1バイト単位の文字を扱うのに対し、`wchar_t` はワイド文字(多くの場合2バイト以上)を扱います。 これにより、日本語や中国語、韓国語などのマルチバイト文字を適切に処理できます。

wchar_tの定義

`wchar_t` は、標準ライブラリ `` で定義されているワイド文字型です。 そのサイズは環境によって異なりますが、一般的には `2バイト`(Windows)または `4バイト`(Linux)です。


#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言語でワイド文字を扱うことができます。 文字列操作、入出力、ファイル処理、マルチバイト変換など、様々な場面で役立ちます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です