2009-09-03 98 views
0

我有某种递归函数,但我需要解析一个字符串,我不知道字符串可以多久。为此分配内存的合适方式是什么?如果我不知道大小,我如何将内存分配给char指针?

+2

你有更多的上下文和/或一些示例代码? – fbrereto 2009-09-03 18:21:08

+2

如果你正在解析一个字符串,那么你*有字符串*,对吗?它会以char *的形式传入,对吧?在这种情况下,您不需要为该部分分配内存。 – Cheeso 2009-09-03 18:23:45

+3

Tooooooooo含糊不清。 – 2009-09-03 18:24:34

回答

6

使用realloc()增加字符串大小,当你用尽到目前为止你已经分配的内存。

每realloc的至少应该加倍您的字符串大小 - 然后花了重新分配的总时间不会渐近不同,相对于一次必要长度的字符串的一个幸运的分配。

+1

我同意,虽然每个分配的大小加倍都没有什么魔力。只要你乘以一个大于1的常数,你停留在O(n)而不是O(n^2)。 2很受欢迎,但使用1.01可以获得相同的时间复杂度。只是一个更大的常数因素。 – 2009-09-03 22:07:59

1

要么你需要有传入的字符串的大小,这样就可以分配足够的内存,或者你把一些合理的限制对字符串的最大长度,说1024个字符。

+1

或者您使用3.选项,分配合理大小的内存并重新分配(),因为您需要更多。 (修补递归函数直接返回字符串或通过传入的char **来操纵它) – nos 2009-09-03 18:25:48

0

如果你不能找到确切的大小(或得到它太贵了),你应该承担一定的价值。如果您可以估计字符串不会超过的最大大小,则可以分配一个该大小的缓冲区(并且在填充字符串后可能会填入realloc()以避免浪费空间)。

如果您不能承担这样的最大值,你应该表现得像帕维尔建议 - 假设一些可能的值,然后再扩大面积为字符串出现。

0

在Unix(FreeBSD的),你也可以使用reallocf()。

相关问题