C言語での文字列の使い方が分からない。
文字列の文字数と用意した配列の数が一致しないのは何で?¥0って何?
今回はこんな悩みを解決していきます!
説明するように配列を使えば、文字列の代入は簡単になります!
strcpyという関数を使った方法もあります。strcpyはこちらの記事を参考にしてください。
文字列の出力
そもそも、配列が分からないという人は参考にしてください。
過去の投稿では「scanf」を使って文字列の出力をしたのですが、今回は配列にそのまま代入する方法を2つ紹介します。
配列の変数宣言と代入はセットで!
配列の変数宣言と文字列の代入はセットです。
どういうことかと言うと、配列は
「char 配列名[文字数+1]={’文字’,’文字’};」
のようにして変数宣言と代入をセットでします。「{’~’,’~’}」(波カッコ)の中には出力する文字列を一つ一つ、シングルクオーテーションとカンマで区切って入れます。
例えば、「Blog」という文字列を変数に代入する時このようになります。
char moji[5]={'B','l','o','g'};
出力するときはprintfの中の変換書式に「%s」を使います。
こうすることで一応、文字列を出力することができます。
けど、この方法って少し効率悪い気がしませんか?文字を一つ一つ区切るのって意外と時間がかかります。なので、別の方法を紹介します。
char 配列名[文字数+1]=”文字列”;
とすることで先ほどと同じように代入と変数宣言を、セットでできます。例えば、「Muu」という文字列を出力するには
char name[4]="Muu";
と書くことで出力できます。このほうがそのまま書くことができて効率的ですよね?3文字なのでまだマシですが、100文字とかだと段違いです。
文字列の出力はこの方法を使うようにしましょう。
今回は練習のために両方使ってみましょう。
#include<stdio.h>
int main()
{
char moji[5]={'B','l','o','g'};
char name[4]="Muu";
printf("%s", moji);
printf("%s", name);
}
このように書きました。出力するときに配列名だけ書くというのは過去に教えているので復習してみてください。
改行していないため「Blog」と「Muu」を合わせて出力されます。
「¥0」とは??
ここで、多分皆さんが気になっていた、「用意した配列の数と実際に扱う文字数が一致していない問題」について解説していきます。
配列の一番後ろ何があるの??(¥0の解説)
今まで説明を避けてきましたが実は、配列に文字列を代入すると、文字列の一番後ろ(先ほどの配列だと「Muu」の後ろ)には自動的に「¥0」という特殊な文字が入ります。
通常、配列をコンピュータで読み込む際、配列の0番目からどんどん読み込み、「何番目にどの文字が入っているか?」を調べます。(文字列「Muu」の場合だと「M」が0番目、「u」が1、2番目です。)
そして、配列の最後(3番目)の「¥0」という文字を読み込むとコンピュータは、「文字列の終わりである。」と認識します。
つまり、配列の1番後ろには、自動的に「¥0」という特殊な文字が入力されていたから何も代入できなかったのです。
ちなみに、「¥0」を出力することはできません。
本当に文字列が終わりであるということを認識するか?
「¥0」を読み込むと「本当に文字列が終わりであるということを認識するか?」を確かめるためにこんなプログラムを作ってみましょう。
#include<stdio.h>
int main()
{
char name[5]="Mu¥0u";
printf("%s", name);
}
こんな感じで文字列の途中にそのまま書いてOKです。また、この場合だと文字列の途中の¥0と一番最後の¥0があるので、3+2の合計で配列数は5になります。間違えないように気をつけましょう。
出力すると「Mu」が表示されます。
また、¥0の性質を利用すれば、配列数をとりあえずたくさん用意しておくのも可能になります。
#include<stdio.h>
int main()
{
char name[100]="Muu";
printf("%s", name);
}
このようにして配列を100個用意しても、文字列の最後に¥0が代入されるので、問題なく「Muu」と出力されます。
覚えて欲しいこと
・配列に文字列を代入する時:char 配列名[文字数+1]=”文字列”;
・配列の1番後ろには「¥0」という特殊な文字が入っていた
・「¥0」という文字を読み込むとコンピュータは、「文字列の終わりである。」と認識する。
・「¥0」の性質を利用すれば、とりあえずたくさんの配列数を用意しておくのもOK
まとめ
今回は配列に文字列を代入する方法と¥0について解説しました。できればすべて読んで欲しいですが、難しいと感じた方はとりあえず、「覚えて欲しいこと」に目を通しましょう。
次は、2次元配列を勉強してみましょう。
コメント