【無料ですぐに作れる】Webフォームで仕事の効率化してみませんか?はじめまして、新人エンジニアのスズキです。入社した4月から、C言語を用いた学習を行っています。今回はC言語における文字列の注意点とマルチバイト文字対応のstrrev関数について解説します。この記事の目次c言語における文字列の注意点strrev関数マルチバイト文字とは?UnicodeUTF-8UTF-8のマルチバイト文字判別stdlib.hのmblen関数を使う上位ビットの状態を調べるマルチバイト文字対応my_strrev解説まとめc言語における文字列の注意点C言語の標準ライブラリの文字列操作系関数の多くは、マルチバイト文字に対応していません。そのため、日本語の文字列を扱うためには工夫が必要です。strrev関数strrev関数とは、文字列の前後を反転させる関数です。バイト単位での反転のため、マルチバイト文字が崩れます。��梖�verrtsstrrev関数[/c]そこで今回は、windows環境以外でも使用でき、かつマルチバイト文字に対応するstrrev関数を自作します。関数の解説の前に、まずはマルチバイト文字についてまとめます。マルチバイト文字とは?マルチバイト文字は、その名の通り複数バイトで構成されています。1バイト(8ビット)で表せるパターンは256通りしかなく、世界中の言語を表現するには不十分です。そこで、複数バイトで1文字を表現することで、対応する文字を増やしたものがマルチバイト文字です。今回はその中でも最も一般的なUnicodeを紹介します。UnicodeUnicodeとは、文字コードの国際的な業界標準です。2020年3月リリースのUnicode13.0.0には、世界中の143,859字を収録しています。Unicodeでは1文字を、4バイト固定のコードポイントで表現します。UTF-8UTF-8(UnicodeTransformationFormat-8)とは、Unicodeの符号化方式のひとつです。UnicodeのコードポイントをUTF-8で符号化して使用します。UTF-8では1文字を、1~6バイトの16進数で表現します。HTML5は、UTF-8を用いた符号化を推奨しています。例)Unicode『あ』U+00003042(4バイト)↓UTF-8で符号化0xE38182(3バイト)※U+はUnicode(16進数)※0xは16進数の目印C言語では、マルチバイト文字を扱う際もバイト単位での操作しか行うことができません。そのため、マルチバイト文字の操作を行うためには、そのバイトがどんな要素なのか調べる必要があります。UTF-8におけるマルチバイト文字の判別方法についてまとめます。UTF-8のマルチバイト文字判別C言語におけるマルチバイト文字の判別方法は1つではありません。今回は、標準ライブラリの関数を使う方法とUTF-8の特徴を利用する方法の2つを紹介します。stdlib.hのmblen関数を使うおそらく最もオーソドックスな方法です。mblen関数は文字列の先頭バイトが何バイト文字なのか出力します。-1,[/c]上位ビットの状態を調べる文字コードの仕組みを利用する方法です。UTF-8では、その文字が何バイト文字なのかによって、上位ビットの値が異なります。表のようにマスクすることで、何バイト文字なのか判別できます。FC今回のstrrev関数の作成では、文字コードの学習もかねて、上位ビットの状態を調べる方法を使用しました。それでは、実際のソースコードを見てみましょう。マルチバイト文字対応my_strrev解説ヘッダーファイルmy_strrev.hにまとめています。文字列の先頭まで1~3を繰り返す新文字列を元文字列にコピーによって、文字列を反転させます。my_mblen関数は、そのバイトがマルチバイト文字のどこに相当するかを返します。マスクと判定条件は、先述のものを使用しています。0以下のようにインクルードすることで、my_strrev関数とmy_mblen関数が使用可能になります。str);return;}[/c]まとめ今回はC言語における文字列の注意点について解説しました。マルチバイト文字の仕組みを知ることで、C言語でも文字列の複雑な操作ができます。使いたい関数がマルチバイト文字に対応していないときには、自作に挑戦してみてはいかがでしょうか。記事が役立ったらクリックをお願いしますフォームズ編集部フォーム作成クラウドサービス「Formzu(フォームズ)」を運営しているフォームズ株式会社です。オフィスで働く方、ホームページを運営されている皆様へ仕事の効率化、ビジネススキル、ITノウハウなど役立つ情報をお届けします。【フォーム作成クラウド】Webフォームで仕事を効率化したい方はこちらから最短30秒で作成。誰でもすぐに利用できます。