C言語のポインタと文字列の処理について

補足

私の頓珍漢な質問にこれだけ熱心に考えて頂いてもう頭が上がりません。

ベストアンサー

3

3人がナイス!しています

この返信は削除されました

ThanksImg質問者からのお礼コメント

私は初心者でありながら、このプログラムは少々不自然だとは正直思っていました (あくまでプログラミングの練習)。 私も含め、1:9で出題者がおかしな方であると頭の片隅には入れておきます。回答してくださった方々ありがとうございました

お礼日時:5/5 20:19

その他の回答(1件)

2

(1): malloc(i+1); (2): strcpy (1)は、入力された文字列を記憶するためのメモリを確保します。iは、2番目のfor文により、この時入力された文字列の文字数になっていて、さらに'\0'が入る分の1バイトを足すので+1しています。 (2)は、入力された文字列を確保したメモリにコピーします。

2人がナイス!しています

カテゴリマスターさんの回答について jが0のとき、i を2倍にする理由は何でしょうか?mallocで余計に確保しても動くことには変わりないですが、無駄じゃないですか? また、C言語の仕様で、sizeof(char) は1に決まっているので、あまり書く意味はないと思います。 それよりも丁寧に描くならば、mallocの引数はsize_tなので、キャストしてあげて malloc((size_t)(i+1)) のほうがよいと思います。 あと、問題分へのツッコミですが、(2)の前の行のif文の条件式ですが、textがNULLになることはないので、text[j] の間違いだと思うのはそのとおりですが、さらに、text[j] が、mallocに失敗してNULLになったとき、最後のif文のなかでヌルポ踏むことになるので、エラー処理して実行を止める処理が必要だと思います。