【C言語入門】文字列編
1. 文字列とは
printf関数で、文字を画面に表示する時、次のように書いた。
printf("あいうえお");
"あいうえお"のように、文字の並びを二重引用符で囲んだものを「文字列リテラル」と言う。
文字列リテラルは、「ナル文字」(値が0の文字)と呼ばれる文字が末尾に付加された状態で記憶域に格納される。ナル文字は「¥0」と表記される。
例えば5文字で構成される文字列リテラル"あいうえお"は6文字分の記憶域を占有する。
文字列リテラルの性質には次のようなものがある。
同一文字列リテラルの扱いは、処理型依存
次の2通りが考えられる。
1.同一の文字列リテラルは同一のものとして扱う。(記憶域の格納レベルで同じ場所に格納する。)
2.同一の文字列リテラルでも、別物として格納する。
2. 文字型
文字を格納する型のことを、「文字型」といい、charで宣言をする。ここで言う文字とは「A」や「B」などの一つの文字のことである。
文字”列”を扱うには、文字型の配列を使えば良い。例えば、
alp = "ABC";
において、
alp[0] = "A"; alp[1] = "B"; alp[2] = "C"; alp[3] = ¥0;
である。文字列の末尾はナル文字が格納されており、逆に文字列の末尾は、最初に出現するナル文字である。これは、例えば次の例を考えれば良い。
printf("ABC¥0DE");
の出力としては、
ABC
である。すなわち、"ABC¥0DE"は、"ABC"と認識される。
文字配列を初期化するには次のいずれかで行う。
char str[] = {"A", "B", "C", "¥0"};
もしくは、
char str[] = "ABC"
文字列の初期化子の代入は不可能である。末尾にナル文字がつくので、要素数を指定する場合は多めに指定する必要がある。
文字が一つもない文字列のことを「空文字列」といい、記憶域上には、ナル文字だけが格納される。
文字列のscanf関数による読み込みは次のように行う。
scanf("%s", name)
読み込む際にも、末尾にナル文字が格納される。
文字列の変化指定子の詳細
最小フィールド幅
少なくとも、この桁だけの表示が行われる。
省略された場合はや指定数よりも文字数が多い場合は、表示するのに必要な桁数で表示される。
-が指定された場合は左側に寄せられ、指定がない時は右側に寄せられる。精度
表示する桁数の上限を表示する。ここに指定された以上の文字数は出力されない。変換指定子
sは文字列を表示することを指定する。配列内の文字はナル文字の直前まで出力される。精度が省略された場合や配列の大きさよりも大きい場合は、配列は必ずナル文字を含む。