逐个字符构建字符串

时间:2013-12-02 01:12:12

标签: c string c99

我正在使用包含分隔字符串的字符流(unseekable):例如abc|def|ghijkd分隔符|。因此,当我解析一个令牌时,我会继续将流的字符添加到字符串中,直到找到一个管道,然后我开始一个新的字符串。

每次添加新角色时,我都不想复制正在构建的字符串。

构建先验未知长度字符串的标准做法是什么?

我现在正在做的是基本上分配一个给定大小的“块”(比如256个字符)并从那里复制流中的字符。当块已满时,我增加块大小(以初始块大小的步长),分配新块,将旧块复制到新位置,释放旧块,将字符添加到新块的末尾,等等,冲洗并重复。这对我来说似乎有点大锤。

1 个答案:

答案 0 :(得分:3)

你正在做的事情基本上是realloc所做的,除了它只会在它无法放大块的情况下复制。标准做法是每次加大块的大小。指数增长将限制所需的重新分配数量。