C言語なら俺に聞け(入門篇) Part 21
■ このスレッドは過去ログ倉庫に格納されています
0822デフォルトの名無しさん
2007/11/27(火) 14:27:00確かに、url_encode()内で文字列長を調べ、必要なメモリサイズを計算し、
メモリを確保してそこへ書き込み、確保したアドレスを返すことは可能です。
しかし、例えば非常に短い間しか必要としない場合、わざわざmallocして
解放漏れのないようコーディングするより、スタック上で済ませた方が
楽チンだったりもします。
また、返って来たアドレスは本当にmallocされたものでしょうか?
staticな変数として関数内に確保されていない、という保証を誰が約束して
くれるのでしょうか?今のバージョンではmallocされていたとして、将来の
バージョンでもmallocされ続ける保証は?
そんなわけで、この手の関数ではバッファの確保を呼び出し側の責任と
する場合が多いです。
そして、確保されたバッファを越えて書き込んで(バッファオーバーフロー)
しまわないよう、何バイトまでなら書き込んでもいいのか、引数として受け取る
という仕様になります。
■ このスレッドは過去ログ倉庫に格納されています