もっと簡単にchar型の配列に文字列nekoを格納(配列の初期化)してみる 

ソーラー

「配列に文字列も格納できるようになったんだ。


やったね💖」


アレサ「大進歩です。ソーラーさん」


ソーラー

「さらに


文字列を配列に取り込む(配列の初期化)にはもっと簡単な方法があります。


今までは配列hairetuに文字列データ"neko"を取り込むのに


次のプログラムのように


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]



文字データ

'n'

'e'

'k'

'o'

'\0'



1文字ずつ


#include <stdio.h>


int main(void)

{

char hairetu[5];

hairetu[0]='n';

hairetu[1]='e';

hairetu[2]='k';

hairetu[3]='o';

hairetu[4]='\0';


printf("%s\n",hairetu);


return 0;

}


コンパイル結果


neko



ソーラー「このプログラムのように


格納してきました。


この初期化方法(文字格納方法)を簡略化して


次のようにプログラムを記述することもできます。


#include <stdio.h>


int main(void)

{

char hairetu[5]={'n','e','k','o','\0'};

printf("%s\n",hairetu);

return 0;

}

コンパイル結果


neko



今までのように


この初期化方法でも


配列hairetuに文字列データ"neko"がとりこまれているのが


コンパイル結果に


nekoが表示されていることからわかります。


文字列データ"neko"がとりこまれているということは


お馴染みヌル文字\0もちゃんと配列hairetuに格納されているよね



ただし以。下のプログラムをご覧ください


(👆この表現おもしろいかな by ソーラー)



#include <stdio.h>


int main(void)

{

char hairetu[5];

hairetu[5]={'n','e','k','o','\0'};


printf("%s",hairetu);

return 0;

}


コンパイル結果


EAZY IDECの場合


ファイル「C:/Users/solarplexuss/AppData/Local/EasyIDEC/project/aaaaa/main.c」の

「6行目」で記述エラーを発見しました。

unrecognized character \x81


Visual Studioの場合


エラー C2146 構文エラー: ';' が、識別子 '=' の前に必要です。

エラー C2065 '=': 定義されていない識別子です。

エラー (アクティブ) E0065 ';' が必要です


ソーラー「


このプログラムのコンパイル結果をみてもわかるように


char hairetu[5]={'n','e','k','o','\0'}; と記述するところを


char hairetu[5];(配列宣言)

hairetu[5]={'n','e','k','o','\0'} (配列の初期化)


のように


配列宣言と配列の初期化をきりはなして行うことはできないんだよ。


さらにもっと簡単に


配列hairetuに文字列データ"neko"を


char hairetu[5]="neko"


と記入してとりこむこともできます。


この場合でも


ナル文字の\0の分だけ


1つ分余計に要素数をかきこまなければ


いけませんし


char hairetu[5]="neko";のように


一度に配列宣言と配列の初期化をおこなう必要があります。


さらにさらにもっと簡単に配列の中の要素数も記述せず


char hairetu[]={'n','e','k','o','\0'}や

char hairetu[]="neko"と


記述する方法があります。


この場合


自動的に{'n','e','k','o','\0'}や"neko"にあわせて


配列char hairetu[]内に


hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

が生成され


hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]


hairetu[0]='n';

hairetu[1]='e';

hairetu[2]='k';

hairetu[3]='o';

hairetu[4]='\0';


n';


'e';


'k';


'o';


'\0';(ヌル文字も)


が格納されていきます。」



アレサ「わかりやすいですの😊」



ソーラー 「アレサ、char型の配列の初期化法はこんな感じ・・・かな?


その中でも


char hairetu[]="neko"と配列に文字列データをとりこむのが一番簡単な方法かな?」


アレサ「はい、(^^)/


これで一文字ずつ配列に文字を格納しなくても


簡単に配列に文字列データをとりこむことができるようになりました。」


ソーラー「というわけでえ~


一番簡単な初期化方法で文字列データを配列にとりこんでprintf表示を


お披露目してみると~~


#include <stdio.h>


int main(void)

{

char hairetu[ ]="neko funnjyatta";

printf("%s\n",hairetu);

return 0;

}


コンパイル結果


neko funnjyatta


となるわけです。


ちゃんとnekoとfunnjyattaの間の空白までprintf出力表示されてるよ


お茶目さんだね。」

  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます