以下是使用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 函数释放容器所占用的内存。

C语言实现简单的可变长度字符串容器

原文地址: https://www.cveoy.top/t/topic/oUiw 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录