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* 情况下的长度。只是元素的间距不对。
关于指针算法在这里如何工作有什么想法吗?
1条答案
按热度按时间jfgube3f1#
可能不是你要找的,但是如果我正在处理这个问题,我会尝试先构建一个指向元素的指针的链表,然后用一个函数将列表展平为一个单独的数据块。
列表和数组中的每个元素都需要一个头部,提供数据类型和大小,以便管理数据。