>> スピーカ1：それでは修正しましょう その最後のプログラム。
そして今回は、のは、明示的に割り当ててみましょう いくつかのメモリ
ユーザの入力が記憶される。
そのためには、のは、第一に焦点を合わせるましょう 我々はSを宣言したコード行
以前にchar型のスターに。
今回は、レッツ再宣言 それは次のよう -
CHAR Sブラケット16、例えば、 閉じ括弧。
>> 言い換えれば、のはなしにsを宣言してみましょう 長い文字のアドレスであること、
むしろ、16文字の配列を。
このように、ユーザは最大15を入力でき 文字と、まだ余地を残す
ヌルターミネータ。
それではコンパイル、保存に進みましょう、 このプログラムを実行します。
scanf2ドットスラッシュscanf2を作る。
それでは、ハローのような文字列を入力してみましょう、 そして我々はこんにちは感謝しています。
>> さて、問題はまだある。
私は唯一である、こんにちはで入力 ヌルのための5つの文字、プラス1
ターミネータ。
それだけで私たちを残し 6バイトの必要性。
>> しかし残念ながら、我々だけ 合計で16を割り当てられる。
もしそうであれば16のユーザーは、実際には種類 文字、又は17、又は数百
文字は、我々はまだするつもりはない のためにメモリに十分な余裕を持って
ユーザーの入力。
そして実際には、これは作るものです ユーザ入力を取得するように
一般的には難しい。
我々は、実際に実装された理由は、これは 最初のget文字列関数
CS50ライブラリ内の場所 -
それらに対処する方法を見つけ出すために 状況ここでユーザーが中
我々より多くの文字 当初想定。
>> 率直に言って、完全にすることなく このプログラムを書き換え、
手際よく解決する方法はありません。
むしろ、私たちがしなければならないだろうことは得ることである で、ユーザ1から文字
時間、何度も何度も。
そして、それぞれの時点で我々は我々がしている実現した場合 メモリが不足して、我々は、しなければならない
その点に戻って、再割り当て いくつかのより多くのメモリは、ユーザのをコピーする
私たちの最初のチャンクから前の入力 新たにメモリーの、
メモリの大きな塊。
してから、再度そのプロセスを繰り返し、 ユーザーが提供して行われ、再びまで
彼または彼女の入力。