08/06/04 23:10:12
>>228
厳密な意味での文字列の配列とは、文字の二次元配列の各行要素に文字列が入っているものを言う。
char strlist[3][8];
このように宣言したとき、strlist[0] ~ strlist[2] は、それぞれが char str[8]; と宣言した str と等価となる。
しかし、上記の配列では、全ての行要素の配列の大きさが同じである必要がある。
つまり、それぞれの行に入る文字列の長さが違っても、最も長いものに合わせなければならず、メモリを浪費しがちである。
それが嫌な場合には、主に文字列へのポインタの配列が使われる。
char *strlist[3];
char str0[5], str1[8], str2[4];
strlist[0]=str0;
strlist[1]=str1;
strlist[2]=str2;
見ての通り、strlist[0] ~ strlist[2] は charへのポインタであり、それぞれが対応する配列の先頭を指している。
ということはそれぞれを文字列として扱うことができ、しかもそれぞれに対応する配列の大きさを個別に設定できる。
ただし、実際にはこのように静的な配列を行要素に使うことはほとんどない。通常、malloc() で割り付けた動的な領域を使う。
malloc() の扱いには熟練を要するので、安易に手を出すのは控えること。
それと念のために言っておくが、Cの配列の添字は 0 から始まる。char str[5]; と宣言したら各要素は str[0] ~ str[4] である。