第11回資料

C言語応用
文字列
文字列リテラル
 文字列リテラルとは
puts(“ABCD”);
上に示すのは、“ABCD”と表示する命令である。この
“ABCD”が文字列リテラルである。
文字列リテラルには、最後にヌル文字と呼ばれる、
‘\0’が付加される。
文字列リテラルの大きさとsizeof
 sizeof
sizeof(型名)は、その型の大きさ(メモリ上に占有する
大きさ)を生成する。
その sizeof には、sizeof 式 という形式もあり、その式
が持つ型の大きさ調べることができる。たとえば i が
int 型の変数であれば、sizeof(i)は int 型の大きさ(2
や4など)となる。
http://www.center.nitech.ac.jp/~sfukui/ouyou/list11-1.c
文字列
 文字列と文字の配列
C言語では、文字列を「文字(char)の配列」に格納
して処理を行なうことが多い。たとえば”ABC”とい
う文字列を使いたければ、配列の先頭か
ら ’A’, ’B’, ’C’, ’\0’と格納される。最後のヌ
ル文字 ’\0’は、文字列の終端を示す「目印」であ
る。
’A’ ’B’ ’C’ ’\0’
文字列
 文字列の初期化
文字列を表す度に、文字の配列の各要素に1文字
ずつ代入していくのは大変である。そこで、
char str[4] = {‘A’,’B’,’C’,’\0’};
と宣言・初期化できる。さらに簡略記法として、
char str[4] = “ABC”;
と宣言することもできる。
文字列
 文字列の読み込み
scanf 関数に渡す書式指定子は”%s”である。
scanf(”%s”,name);
第2引数は name となっている。&(アドレス演算
子)はいらない。これは name が配列であり、[ ]
を伴っていないので、その配列の先頭要素への
ポインタとみなされるからである。
http://www.center.nitech.ac.jp/~sfukui/c/list11-2.c
文字列
 文字列の長さ
文字配列に対して、常に文字列を一杯に格納す
るとは限らない。
char str[8] = ”ABCD”;
配列 str
’A’ ’B’ ’C’ ’D’ ’\0’
文字列
空き
文字列
文字の末尾には、終端を示す ‘\0’ が必ずあるので、先
頭から ‘\0’ の前までの文字数を数えれば、その文字の
長さを求めることができる。
int strlength(char s[])
{
int i ;
for(i = 0;s[i] != ‘\0’;i++);
return(i);
}
http://www.center.nitech.ac.jp/~sfukui/ouyou/list11-3.c
文字列
 標準ライブラリ strlen
文字列の長さを求める関数は、自分で作成しなく
ても、標準ライブラリとして提供されている。
strlen
ヘッダ
形式
解説
戻り値
#include<string.h>
size_t strlen(const char *s);
s の指す文字列の長さ(‘\0’は含まない)をもとめる。
長さである非負の整数を返す。
演習
 標準ライブラリ strlen 関数を利用して、次の文字
列リテラル
”AB\tC”
”ABC\0XYZ”
の長さを表示するプログラムを作成せよ。
 文字列を読み込み、その文字列に含まれている
数字文字’0’,’1’,・・・,’9’の個数を出力するプログ
ラムを作成せよ。