透2017/6/222019/4/17あなたはchar型を使ってますか?char型は文字・文字列や画像を256階調で表す場合によく使われます。文字列は配列やポインタで扱うので複雑に感じるかもしれません。この記事では、char型について「文字(char)の使い方」「文字列(char配列)の使い方」という基本的な内容から、「文字列を扱う関数」など応用的な使い方を、わかりやすく解説していきます。まとめ文字(char)の使い方charとは1文字を格納するデータ型です。’」(クオーテーションマーク)で囲みます。‘文字’;printf関数などを使って出力表示する際の変換指定子は「c」になります。char」型があります。char」になります。charとなるケースもあります。char型は文字のほかにも数値を格納することができます。文字を代入した変数をint型の変換指定子「d」で出力表示すると、対応するASCIIコードの数値が表示されます。char」型の変数は-128~127の値をとります。char」型の変数は0~255の値をとります。これらの範囲以外の値を代入すると意図しない値で扱われることになるので注意しましょう。char型の変数のサイズは1バイトです。ちなみに日本語の全角文字は2バイト以上の文字となりますので、char型の変数には格納できません。それではサンプルコードで確認していきましょう。このコードではchar型の値の範囲を確認するために、ヘッダーファイル「limits.h」をインクルードしています。255このサンプルコードではchar型の変数「chr1」を宣言初期化し、変換指定子「c」を使って出力表示しています。int型の変換指定子「d」を使ってASCIIコードでも出力表示しています。文字「a」~「c」のASCIIコードをfor文を使って表示しています。ヘッダーファイル「limits.h」で定義されているchar型のサイズや値の範囲を表示して確認しています。文字列(char配列)の使い方char型の配列は文字列として扱うことができます。]」記号を使って文字列サイズを指定し宣言する方法と、ポインタを使って宣言する方法があります。それぞれの方法について確認していきましょう。]」記号を使って文字列サイズを指定し宣言する方法について説明します。”」(ダブルクオーテーションマーク)で囲み、下記のように記述します。“文字列”;この場合、文字列サイズの記述を省略することができます。省略した場合、文字列の長さに1加えた値でサイズが決まります。これは文字列の最後の文字のあとに終端文字「\0」(NULL)を入れる決まりになっているからです。}」記号で囲む下記のような記述も可能です。・・・};この場合も、文字列サイズの記述を省略することができます。省略した場合同じように文字列の長さに1加えた値でサイズが決まり、文字列の最後の文字のあとに終端文字「\0」(NULL)が入ります。printf関数などを使って出力表示する際の変換指定子は「s」になります。それではサンプルコードで確認していきましょう。Hello1番目の文字はH2番目の文字はe3番目の文字はl4番目の文字はl5番目の文字はo6番目の文字はこのサンプルコードでは文字列「str1」を宣言、初期化しています。この文字列「str1」の文字列サイズをsizeof関数を使って計算し、for文を使って1文字ずつ表示しています。出力表示を確認すると5文字の文字列「Hello」に対して「6番目の文字は」と表示されています。6番目の文字は表示されていません。これは文字列の最後の文字「o」のあとに終端文字「\0」(NULL)が入っているためです。}」記号で囲んで初期化した場合も、最後の文字のあとに終端文字「\0」(NULL)が入っていることが確認できます。ポインタの使い方char型のポインタを使って宣言する方法について説明します。“文字列”;この場合も、文字列の最後の文字のあとに終端文字「\0」(NULL)が入ります。printf関数などを使って出力表示する際の変換指定子は同じように「s」になります。それではサンプルコードで確認していきましょう。Hello1番目の文字はH2番目の文字はe3番目の文字はl4番目の文字はl5番目の文字はo6番目の文字は7番目の文字はp8番目の文字はtこのサンプルコードではchar型のポインタ「ptr」を宣言、初期化しています。ポインタ「ptr」の文字列サイズをsizeof関数を使って計算し、for文を使って1文字ずつ表示しています。実行結果の表示がおかしいですね......。実は、ポインタをsizeofに渡した場合、あくまでそのポインタ型のサイズしか取得することができないのです。配列のサイズを取得できる訳ではありません。したがってfor文を使って1文字ずつ表示するには、別の方法で文字列サイズを算出するのが適した方法になりますので注意しましょう。別の方法については後述します!文字列を扱う関数についてC言語にはstrlen、strcpy、strncpy、strcat、strcmpなどの文字列を扱う関数が標準ライブラリに用意されています。これらの関数を使う際にはヘッダーファイル「string.h」をインクルードする必要があります。これらの関数の使い方をみていきましょう!strlenで文字列長さを取得する方法strlen関数は第1引数に記述した文字列の文字列長さを取得します。取得する値は終端文字を除いた文字列長さになります。それではサンプルコードで確認していきましょう。Hello1番目の文字はH2番目の文字はe3番目の文字はl4番目の文字はl5番目の文字はo6番目の文字は7番目の文字はp8番目の文字はt1番目の文字はH2番目の文字はe3番目の文字はl4番目の文字はl5番目の文字はoこのサンプルコードでは前述のポインタを使った方法のコードに、修正を追記しています。strlen関数を使って終端文字を除いた文字列長さの分だけfor文で繰り返しています。文字列は数値の配列と同じように「=」記号で代入してコピーすることができません。文字列をコピーしたい場合はstrcpyもしくはstrncpy関数を使用しますstrncpy関数はコピー元の文字列の先頭から文字数を指定してコピーすることができます。それではサンプルコードで確認していきましょう。Helloこのサンプルコードでは文字列「str1」の値を文字列「str2」、「str3」にコピーしています。文字列「str2」には「str1」と同じ文字列をコピーしています。文字列「str3」には「str1」の先頭から5文字をコピーしています。strcatで文字列を連結する方法strcat関数を使って文字列を連結します。strcat関数の第1引数の文字列の後に第2引数の文字列をつなげてポインタで返します。それではサンプルコードで確認していきましょう。World!このサンプルコードでは文字列「str1」のあとに「str2」をつなげてポインタ「str3」に返しています。strcmpで文字列を比較する方法strcmp関数を使って文字列同士が同じか否か比較します。数値同士の比較は「==」記号を使いますが、文字列(Char型配列)で「==」記号を使うとアドレスが同じか否かの比較となるので注意しましょう。(またこの際、動作には影響しませんが、環境によっては警告が出る場合もあります)それではサンプルコードで確認していきましょう。違う文字列ですこのサンプルコードでは文字列「str1」と「str2」、「str3」を比較しています。World!」の文字ですがfalseと判定されています。これはアドレスを比較してアドレス先が違うためです。strcmp関数を使うと文字が同じか否か判定できていることがわかります。まとめここでは、char型について説明しました。char型の配列とポインタを使って文字列を扱うことができます。string.hの関数群とあわせて使いこなすことができるように、この記事を何度も参考にして下さいね!TweetPocket無料でSEからWebエンジニアへ転職しませんか?侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、システムエンジニアという職業だけどコードが書けない事務作業が多くスキルがないため将来が不安スクールに通うと完全未経験者と同じスタートになるからレベルが合わないという、すでに知識があるSEならではのお悩みがあることに気づきました。弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。こちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。熊本在住のフリープログラマ兼ライターです。C/C++/C#、Java、Python、HTML/CSS、PHPを使ってプログラミングをしています。専門は画像処理で最近は機械学習、ディープラーニングにはまっています。幅広くやってきた経験を活かしてポイントをわかりやすくお伝えしようと思います。お問合せはこちらでも受け付けています。