4[C入門]

Cでは文字と文字列は違います。'a','3','!'みたいなのが文字。"abc","atcoder","yk0n"みたいなのが文字列です。文字は「'」で囲み,文字列は「"」で囲みます。

文字

文字は数に対応しています。これが文字コードです。

'a'の文字コードは97。'3'の文字コードは51。'!'の文字コードは33。ただし環境によって異なります。

文字はchar型です。char型は必ず1バイトです。

char ch = 'a';
printf("%c", ch);

aと出力されます。文字を出力する専用の関数もあります。putcharです。putcharはすごい簡単で,

putchar(ch);

これでchの表す文字が出力されます。putcharは出力した文字を返します。

putchar('d');

dと出力されます。

putchar(putchar('2') + 3);

25と出力されます。(環境によらない)

文字列

さて,"abc"みたいな文字列を扱いたいときはどうすればよいか。

文字の配列を使うんです。char[]型です。言い換えるとchar*型です。

文字列としてnull-terminated character array(ヌル文字で終わる文字配列)を使うのがC言語の特徴です。

3文字の文字列なら4バイト,10文字の文字列なら11バイト確保して,最後にヌル文字'\0'をつけます。ヌル文字が文字列の終端を表します。これは関数に文字列を渡した時に文字列がどこで終わるのかが分かるようにするための措置です。

「"」で囲うと,文字列の先頭へのポインタを表します。

char buf[4] = "abc"; printf(buf);

abcと出力されます。

char buf[] = "abc"; putchar(buf[1]);

bと出力されます。

「"」で囲った文字列が登場した時点でその文字列のための領域が確保されるので,

char *buf = "abc";

としても全く同じです。

文字列の長さを取得するstrlen関数,文字列を比較するstrcmp関数,文字列をコピーするstrcpy関数,文字列を連結するstrcat関数などいろいろな関数があります。読み方は自由です。strはstringの略。lenはlength,cmpはcompare,cpyはcopy,catはconcatenateの略。昔のC言語は関数(外部識別子)の名前が6文字以内でなければいけなかったので,ぎゅっと省略されています。

文字列の配列

char hoge[5][10] = {"abcdefghi", "jklm", "no", "pqrst", "uvwxyz"};
printf(hoge[0]);
printf(hoge[3]);

長さ9の文字列が5つ。abcdefghipqrstと出力されます。[5][10]の5だけは省略できます。また,char *hoge[5]としても同じです。