next up previous contents
Next: 19.5 課題 19 Up: 19. 構造体 I Previous: 19.3 初期化

19.4 文字列の読み込み

キーボードなどの標準入力から文字列(複数の文字)を指定したメモリ領域に、 リターンか、またはファイルの終わりになるまで読み込むことが、cin>> を使って行える。

例 12
        main(){
                char str[80];
                while(cin >> str){
                    cout << str << endl;
                }
        }

この例は、ファイルの終わり、又はキーボードから ctrl+D が入力されるまで、 入力を複製するだけのプログラムである。 但し、cin>> では、改行は捨てられるので(改行までを読み込む)、 改行したい場合は、自分で改行を指示しなければならない点に注意。

ここで、配列名 str はあるアドレスを 指している事に注意しよう。つまり、cin >> は引数に指定されたメモリ領域 に標準入力を書き込むだけである。この時に、メモリ領域が確保されているかどうか などは検査しないので、次のプログラムは誤っている。

間違った例
        main(){
                char *str;
                while(cin >> str){
                    cout << str;
                }
        }

例 12 との違いはたった一ヶ所で、char str[80]char *str になっているだけであるが、前者が文字 80 個分のメモリ領域を確保するのに 対して、後者は文字へのポインタ変数 1 個分のメモリ領域しか確保されていない のである。従って、このプログラムはほぼ確実にメモリ破壊を引き起こす。



Noriyo Kanayama