用不同长度的元素填充缓冲区,没有最大长度 - C

问题描述 投票:0回答:1
void push(struct Stack *stack, void *element)
{
    if (stack->len < stack->size)
    {
        memcpy(stack->arr + stack->len * sizeof(stack->elem_size), element, strlen((char*) element));
        printf("Pushed: %s\n", (char *)element);
        stack->len++;
    }
    else
    {
        printf("Stack is full.\n");
    }
}



void display(struct Stack *stack)
{
    char** arr = (char**) stack->arr;
    for (int i = 0; i < stack->len; i++)
    {
        printf("[%s]\n", stack->arr + i * stack->elem_size);
    }
    printf("Done\n");
}

嗨,我正在温习 C 的抽象,我想知道是否有人知道一种有效的机制,通过该机制我可以在数组中包含不同长度的元素,而无需为它们显式分配空间。我为 1024 字节的字符串分配了一个缓冲区。 Stack->arr 和 elment 的类型为 void*。

上面的代码无法正常工作,因为类型本身的大小可能无法充分预测 char* 情况下变量的长度。这些元素的间隔不正确。

关于指针算术如何在这里工作有什么想法吗?

arrays c pointers
1个回答
0
投票

可能不是你正在寻找的东西,但如果我正在解决这个问题,我会很想首先构建一个指向元素的指针的链接列表,并有一个函数将列表展平为单个数据块。

列表和数组中的每个元素都需要一个标头来提供数据类型和大小,以便管理数据。

© www.soinside.com 2019 - 2024. All rights reserved.