例として、ユーザーから入力された複数行の入力を保存することを考えてみよう。
まず最初に gets()で読み込むために適当な大きさの配列を取ることに
する。
char buf[512];
...
while( gets(buf)!=NULL ){
...
|
ここでは一行は512文字までであると仮定しているが心配ならばそれ以上に
しても良い。さて、問題は、次々とユーザーが入力した文字列を失わずに
保持するためには、buf[]に格納されたデータを別の場所にコピーして
保存しなければならない。しかし、buf[]に用意したのと同じように
512の大きさの配列を別に用意するのは、前述したようにメモリの無駄となる。
実際、ユーザーは一行に1文字しか入力しないかも知れないからである。
従って、ユーザーが入力しただけの文字数分のメモリを用意出来れば良い。
この場合のプログラムは次のようになるだろう。
char buf[512];
...
while( gets(buf)!=NULL ){
/* buf[] の文字数を数える。仮にNとする */
/* N+1 の大きさのメモリを用意する */
/* 用意したメモリに buf[] の中身をコピーする */
|
ここで、N+1 としているのは、文字列の終わりの \0を
勘定に入れているためである。
次の節ではまずこのメモリを確保する方法について学ぶ。