例として、ユーザーから入力された複数行の入力を保存することを考えてみよう。
まず最初に 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
を
勘定に入れているためである。
次の節ではまずこのメモリを確保する方法について学ぶ。