「C言語練習」 1-9.c   ・前へ   ・次へ
/* 文字列   1-9.c */
#include <stdio.h>

/* 今回は文字を扱う。文字は文字列(=文字の連なり)として現れるのが普通であるから、この
連なりを一纏めにして扱うのが便利である。つまり、一つの変数名で一つの文字列を扱えれば都合
がいい。その為に配列(一つの変数名で多数のdataを扱う)を使う。
 一つの変数には一つの文字しか納められないので、実質的な文字列操作をしようと思えば配列を
使わざるを得ない。
 */
main()
{
	char c1='s',c2='c',c3='h',c4='o',c5='o',c6='l';
	char c[7];
	char str[]="バンザイ!";
	char str2[100];

// 様々な形で文字変数を宣言。

/* char c1='s';の様にすると文字の数だけ変数が要るし、各変数に一文字ずつ格納して行かねば
ならない。これを表示して見よう。文字表示には%cを使う。*/

	printf("* 文字列を扱う *\n\n");
	printf("文字変数を 6つ使用: %c%c%c%c%c%c\n",c1,c2,c3,c4,c5,c6);

/* char c[7];と配列宣言すると、同じ事をするのに変数名は一つで良くなる。文字は同じく各
要素に一つずつ格納しておく(下の一行)。ここで、実際の文字数は 6つなのに配列要素を 7つ
宣言しているのは、文字列終端記号を納めて置く為。一つの変数名で文字列を表す場合には、文
字列終端を示す必要がある。終端記号には数値 0を使う。下では、文字列終端記号としての 0
(数の 0としてではなく)であることを明示する為に、前に \を付けた\0を納めている。数字の
 0が文字として扱われる時には、全く別の数値 48になる(文字も数値で納まっている)。
*/
	c[0]='S';c[1]='C';c[2]='H';c[3]='O';c[4]='O';c[5]='L';c[6]='\0'; //c[6]=0でも同じ

	printf("配列を使うと扱いが楽: %s\n\n",c);

/* 文字列表示には、%sを使う。sは string( 列、連)の意。表記が随分すっきりと楽になる。
変数名は []を付けずに cとだけ書く。

 幾ら配列を使っても各要素に文字を個別に入れるのは面倒である。しかし、上の宣言で
 char str[]="バンザイ!"; と書いたように文字列をそのまま配列文字変数に納めることが
出来る。宣言時に初期化して文字列を納める場合は、str[]の様に要素数の所は空白にしても
構わない。勝手に要素数が数えられ最後に'\0'が納まる。
 また、文字列は宣言時を除けば str[]="バンザイ!"; の様な形では代入する事ができない。
文字列の代入には特別な命令が必要(次回)。
 文字列を" "で囲んであるのに注目。文字は' 'で囲み、文字列は" "で囲む。
 */
	printf("文字列を扱えるようになった: %s\n\n",str);

	printf("[入力文字列を表示]\n何か入力:");
	scanf("%s",str2);	// scanfで文字入力も出来る(空白は不可)。

/* 入力文字列の長さがどれ位あるか不明なので、ここで使う文字変数の配列要素数は多目に宣言
しておく(str2[]には100確保)。ところで、文字列を scanf();で取りこんでいるのに変数の前
に &が付いていない。
 文字列の場合には、str2[0]とか str2[3]の様に要素を指定せずに変数名だけを用いると、文字列
先頭のaddressを指すので、これで構わない。数値変数名の前に &を付けたのと同じ事である。
 scanf();は指定したaddressに値を取りこむ命令。
 */
	printf("\n入力文字列=%s\n",str2);
	printf("入力文字列も扱えるぞ  %s %s\n",str,str);

printf("\nEnd\n");
return 0;
}


(前に戻る)   ・次へ