質問: (char *)malloc(sizeof(char) * (num + 1)); ``` 1*は全部間接参照演算子? 2charはキャスト? 3sizeofがなぜ必要?
回答: malloc関数で動的にメモリを確保する処理になります。 malloc関数の使い方はシンプルにこうなります。 ``` malloc(確保したいメモリサイズ); 戻り値:確保したメモリの先頭アドレス(void型のアドレス値) ``` 難しいと感じるのは、mallocの前後の記述でしょう。 `(char *)`はキャストになります。 代入先の変数`str`は`char*型`で宣言してます。 それに対しmallocの戻り値はvoid型のアドレス値ですから、`str`に合うように型変換をしています。 `sizeof(char) * (num + 1)`の部分は確保したいサイズの計算です。 C言語では文字列の格納先は主にchar型の配列で表されます。 よってchar型のサイズがいくつ必要かを計算します。 必要な数は、scanfでの入力値+文字列終端を表すNULL文字を含めた数になります。 通常1文字1バイトなのでsizeof(char)は不要ですが、どんな環境でも対応できる作りにしているのではないかと思います。