我目前正在用 C 实现一个非常简单的JSON 解析器,我希望能够使用可变字符串(我可以在没有可变字符串的情况下做到这一点,但是无论如何我想学习最好的方法)。我目前的方法如下:
char * str = calloc(0, sizeof(char));
//The following is executed in a loop
int length = strlen(str);
str = realloc(str, sizeof(char) * (length + 2));
//I had to reallocate with +2 in order to ensure I still had a zero value at the end
str[length] = newChar;
str[length + 1] = 0;
我对这种方法很满意,但是考虑到我总是每次只附加一个字符,这让我觉得效率有点低(为了争论,我没有做任何前瞻来找到我的字符串的最终长度) . 另一种方法是使用链表:
struct linked_string
{
char character;
struct linked_string * next;
}
然后,一旦我完成处理,我就可以找到长度,分配char *
适当长度的 a,并遍历链表以创建我的字符串。
但是,这种方法似乎内存效率低,因为我必须为每个字符和指向下一个字符的指针分配内存。因此,我的问题有两个:
- 创建一个链表然后创建一个 C 字符串是否比每次重新分配 C 字符串更快?
- 如果是这样,获得的速度是否值得更大的内存开销?