問題CPP00400の解答例と解説 C++ Lv.2
文字列の標準出力(char*)(15分)
<解答例 1>
これは問題文にある解答だよ。文字列を標準出力するという問題は、前にもあったけど、それは string という型を標準出力していたよね。例えば以下のように。
どちらも文字列を標準出力しているんだけど、string というのは、実は中で char 型のメモリ領域を管理しているんだ。だけど、char* みたいなポインタは安全に扱うには正しい知識が必要で、それを理解するのは少し難しいし、面倒臭いところもあるから、誰でも扱いやすいように string というクラスが作られたんだ。
だけど、C++でプログラムを書くときはポインタは理解した方がいいし、コードレジュメではポインタを正しく扱うための練習ができるところだと思うので、この後 char* 型の問題をいくつか用意していくから、正しく理解してみてね。
ちなみに解答例1の1行目の pStr の先頭の p は pointer の p だよ。別にこうしなければいけないわけではないんだけど、ポインタなのか、その変数が実態の値なのかを区別するためによく使われる書き方だよ。
だけど、C++でプログラムを書くときはポインタは理解した方がいいし、コードレジュメではポインタを正しく扱うための練習ができるところだと思うので、この後 char* 型の問題をいくつか用意していくから、正しく理解してみてね。
ちなみに解答例1の1行目の pStr の先頭の p は pointer の p だよ。別にこうしなければいけないわけではないんだけど、ポインタなのか、その変数が実態の値なのかを区別するためによく使われる書き方だよ。
<解答例 2>
今の時点では解答例1のプログラムでも十分なんだけど、もう少し厳密な話をすると、こうする方がいいよ。
これはつまり、3行目のところで、"pStr が NULL というものではなければ" という条件が追加されているんだけど、ポインタというのは、メモリ上のどこかを指し示しているものなんだけど、どこも指し示していない時があるんだ。そのときは、ポインタは NULL になっているんだ。NULL というのは "空の"とか "0の" という意味の英語だよ。
NULL のポインタを cout に渡してもプログラムはクラッシュしないかもしれないけど、ポインタを扱うときはこういう風にいつも NULL かどうかをチェックしておくといいよ。ポインタが NULL になっていた時のことを忘れてプログラムしてしまうバグは世の中にものすごく多いよ。(だから string というクラスが重宝されるんだけど)
これはつまり、3行目のところで、"pStr が NULL というものではなければ" という条件が追加されているんだけど、ポインタというのは、メモリ上のどこかを指し示しているものなんだけど、どこも指し示していない時があるんだ。そのときは、ポインタは NULL になっているんだ。NULL というのは "空の"とか "0の" という意味の英語だよ。
NULL のポインタを cout に渡してもプログラムはクラッシュしないかもしれないけど、ポインタを扱うときはこういう風にいつも NULL かどうかをチェックしておくといいよ。ポインタが NULL になっていた時のことを忘れてプログラムしてしまうバグは世の中にものすごく多いよ。(だから string というクラスが重宝されるんだけど)
初めての方へ:このページは、このサイトで用意しているプログラミング問題の解答と解説のページです。このサイトではブラウザ上からプログラミングができます。会員登録(無料)して、プログラミングしてみませんか?
新規登録
新規登録