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