如果我不知道大小,我如何将内存分配给char指针?

时间:2009-09-03 18:17:26

标签: c

我有一些递归函数,但我需要解析一个字符串,我不知道该字符串可以有多长。为此分配内存的适当方式是什么?

4 个答案:

答案 0 :(得分:6)

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

每个realloc至少应该是你的字符串大小的两倍 - 那么重新分配所花费的总时间将不会渐近地变化,与一次必要长度字符串的幸运分配相比。

答案 1 :(得分:1)

要么你需要传入字符串的大小,以便你可以分配足够的内存,或者你必须对字符串的最大长度设置一些合理的限制,比如说1024个字符。

答案 2 :(得分:0)

如果你无法找到确切的尺寸(或者它太贵了),你应该假设一些价值。如果你可以估计字符串不会超过的最大大小,你可以只分配一个大小的缓冲区(填充字符串后可能realloc(),以避免浪费空间。)

如果你不能假设这样的最大值,你应该像Pavel建议的那样 - 假设一些可能的值,然后在字符串出现时扩展该区域。

答案 3 :(得分:0)

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