こんにちは､ お帰りなさい｡ これが私たちポインターセクションの最後の課題､
最後のチャレンジになります｡
このチャレンジでは､ 動的メモリ割り当ての仕組みを理解してほしい｡
だから､ 文字列をmallocする必要があるんだ｡
かなりベーシックなものになりそうです｡
しかし､ これを読めば､ 動的メモリ割り当ての概念全体を理解することができます｡
ダイナミックメモリーアロケーションの利点は何ですか？
まあ､ 必要なときに十分なメモリを確保できるということですね｡
メモリを無駄にする必要はありません｡ さらにメモリが必要になったら､ 再割り当てすればいい｡
この課題は､ mallocを使わせるだけです｡
そこで､ このチャレンジでは､ 動的メモリ割り当ての理解度を試すプログラムを書いていただきます｡
ユーザーが文字列を入力するプログラムを書いてほしい｡
だから､ scanfを使う必要があるのです｡ git s を使うこともできます｡ これまであまり話題にしませんでしたが､
標準入力ストリームで git s または f git s を使えば､ スペースを含む文字列を読み込むことができます｡
scanfはスペースまでの文字列しか読まないことを覚えておいてください｡
git sを使えば､ スペースで区切られた複数の文字列を読み込むことができます｡ しかし､
scanfでもgit sでもどちらでもかまいません｡
ユーザーに文字列を入力してもらうのです｡ プログラムは､ 入力されたテキストを印刷することになります｡
とても簡単そうに見えますが､ ここでの違いは､ プログラムが動的なメモリ割り当てを利用しようとしていることです｡
また､ ユーザーが入力する文字列の上限を入力させ､ それをmallocに使用することで､
何バイトを確保すればよいかがわかります｡
文字ポインタのみを作成し､ 文字配列は作成しないでください｡
メモリを確保してほしい｡ 文字配列を作るときに､ 括弧に入れたサイズに応じて自動的にメモリが割り当てられることを覚えておいてください｡
また､
大きな欠点として､ サイズよりも大きなものを入力しようとすると､ 再コンパイルしなければなりません｡
静止画です｡ そのメモリはコンパイル時に確保される｡
動的メモリは､ プログラムを実行しているときに割り当てられる｡
そして､ ユーザーが入力した内容に応じて､ どれだけのメモリを割り当てるかを決定することができるわけです｡
そこでもう一度､ 文字列に割り当てるバイト数の数値を入力してもらいます｡
そして､ その文字列を入力するようにユーザーに要求します｡
そして､ 正しくメモリを確保し､ その文字ポインタをscanfやgit
sに渡して､ 基本的には入力されたテキストを表示するだけでいいのです｡
そして､ 最後に忘れてはならないのが､ 大切な無料機能です｡
使い終わったら必ずメモリを解放し､ 他のプログラムがそのメモリを利用できるようにしたいものです｡
特に組み込みシステムのリアルタイムプログラムでは､
メモリは希少資源なので､ メモリを占有せず､ 解放してください｡
がんばってください！次回の講義で解決策を提示します｡ ありがとうございます｡