2009-09-03 8 views
0

私はある種の再帰関数を持っていますが、文字列を解析する必要があります。文字列の長さはどれくらいか分かりません。そのためにメモリを割り当てるにはどのような方法が適していますか?サイズがわからない場合、どのようにメモリをcharポインタに割り当てるのですか?

+2

コンテキストやサンプルコードがありますか? – fbrereto

+2

文字列を解析している場合は、文字列*を持っていますか?それはchar *または何か、右として渡されますか?その場合、そのパーツにメモリを割り当てる必要はありません。 – Cheeso

+3

Tooooooooo曖昧。 –

答えて

6

realloc()を使用すると、今まで割り当てたメモリを使い切ったときに文字列サイズを大きくすることができます。

各reallocは文字列のサイズを少なくとも2倍にする必要があります。再配置に費やす全体の時間は、必要な長さの文字列を一度に幸運にも割り当てたのと比べて漸近的に変化しません。

+1

各割り当てでサイズを倍増するという魔法はありませんが、私は同意します。 1より大きい定数を掛け合わせる限り、O(n^2)ではなくO(n)にとどまります。 2が普及していますが、1.01を使用すると同じ時間の複雑さが得られます。ちょうどはるかに大きな定数です。 –

1

十分なメモリを割り当てることができるように、渡される文字列のサイズを持たせるか、文字列の最大長に適度な制限(たとえば1024文字)を設定する必要があります。

+1

または3.オプションを使用して、妥当なサイズのメモリを割り当て、必要に応じてrealloc()します。 (再帰関数を使って文字列を直接返すか、渡されたchar **を使って操作する) – nos

0

正確なサイズがわからない(または値段が高す​​ぎる)場合は、単に値を取る必要があります。文字列が超えない最大サイズを見積もることができれば、そのサイズのバッファを割り当てることができます(スペースを浪費することを避けるために、文字列を埋め込んだあとrealloc()にすることもできます)。

このような最大値を取ることができない場合は、Pavelの示唆のように動作する必要があります。可能な値を想定し、領域が文字列として発生するように展開します。

0

Unix(FreeBSD)では、reallocf()を使用することもできます。

関連する問題