C语言实现简单的可变长度字符串容器
以下是使用C语言实现一个最简单的容器,用于存放可变长度的字符串的示例代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define INITIAL_CAPACITY 10
typedef struct {
char* data;
int length;
int capacity;
} StringContainer;
void initializeStringContainer(StringContainer* container) {
container->data = (char*)malloc(INITIAL_CAPACITY * sizeof(char));
container->length = 0;
container->capacity = INITIAL_CAPACITY;
}
void appendString(StringContainer* container, const char* str) {
int strLength = strlen(str);
if (container->length + strLength + 1 > container->capacity) {
while (container->length + strLength + 1 > container->capacity) {
container->capacity *= 2;
}
container->data = (char*)realloc(container->data, container->capacity * sizeof(char));
}
strcat(container->data, str);
container->length += strLength;
}
void freeStringContainer(StringContainer* container) {
free(container->data);
container->data = NULL;
container->length = 0;
container->capacity = 0;
}
int main() {
StringContainer container;
initializeStringContainer(&container);
appendString(&container, 'Hello, ');
appendString(&container, 'world!');
printf('%s\n', container.data);
freeStringContainer(&container);
return 0;
}
该代码使用了一个结构体 StringContainer 来表示容器,其中包含一个指向字符数组的指针 data、字符数组的长度 length 和字符数组的容量 capacity。容器的初始化函数 initializeStringContainer 会分配一段初始容量的内存,并将容器的长度和容量设置为 0 和 INITIAL_CAPACITY,容器的 data 指针指向分配的内存。向容器中添加字符串的函数 appendString 会先计算待添加字符串的长度 strLength,然后检查容器中剩余的空间是否足够存放该字符串,如果不足则将容量扩大至原来的两倍,并使用 realloc 函数重新分配内存。最后使用 strcat 函数将字符串追加到容器的末尾,并更新容器的长度。释放容器所占用的内存的函数 freeStringContainer 会使用 free 函数释放容器的 data 指针指向的内存,并将容器的 data 指针、长度和容量设置为 NULL、0 和 0。在 main 函数中,我们首先使用 initializeStringContainer 函数初始化容器,然后使用 appendString 函数向容器中添加两个字符串,最后使用 printf 函数输出容器中的字符串,并使用 freeStringContainer 函数释放容器所占用的内存。
原文地址: https://www.cveoy.top/t/topic/oUiw 著作权归作者所有。请勿转载和采集!