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

e0bqpujr  于 2023-10-16  发布在  其他
关注(0)|答案(1)|浏览(91)
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-> nums和elment的类型是void*。
上面的代码不能正确工作,因为类型本身的大小可能无法充分预测变量在char* 情况下的长度。只是元素的间距不对。
关于指针算法在这里如何工作有什么想法吗?

jfgube3f

jfgube3f1#

可能不是你要找的,但是如果我正在处理这个问题,我会尝试先构建一个指向元素的指针的链表,然后用一个函数将列表展平为一个单独的数据块。
列表和数组中的每个元素都需要一个头部,提供数据类型和大小,以便管理数据。

相关问题