gpt4 book ai didi

c - 我的推送函数总是将最新的元素推送到堆栈的每个值上

转载 作者:行者123 更新时间:2023-11-30 17:57:00 25 4
gpt4 key购买 nike

因此,出于某种原因,这个函数似乎将所有相同的值插入堆栈(或者只是打印相同的值;我想它实际上可能与我也包含的 printAll 函数有关。)?问题是,对于元素数组(这是一个整数数组), printAll 适本地循环遍历这些值。但对于 charElement 数组, printAll 函数仅打印 charElements 函数中每个值的最新值。知道为什么会发生这种情况吗?

void pushString(Stack *S, char element[])
{
/* If the stack is full, we cannot push an element into it as there is no space for it.*/
if(S->size == S->capacity)
{
printf("Stack is Full\n");
}
else
{
/* Push an element on the top of it and increase its size by one*/
S->charElements[S->size++] = element;
S->elements[S->size-1] = '\n';
}
return;
}



void printAll(Stack *S)
// NOTE: Called w/ user input 'f'
// PRE: Stack S is initialized
// POST: Print all values from the stack
// Do NOT alter anything
{

int i;
for(i = 0; i < S->size; i++)
{
printf("%d \n", i);
if(S->charElements[i] == "\n")
{
printf("%.2f \n", (float)S->elements[i]);
}
else if(S->elements[i] == '\n')
{
printf("%s \n", S->charElements[i]);
}
}
}

最佳答案

S->charElements[S->size++] = element;

仅将指针复制到传入的 char* element

如果您使用相同的缓冲区读取输入,然后重复将其传递给 pushString 函数,则所有堆栈元素最终都会指向相同的缓冲区,并且其内容是最后输入的值.

您需要使用strdupmallocstrcpy复制内容。

S->charElements[S->size++] = strdup(element);

分别

S->charElements[S->size] = malloc(strlen(element) + 1);
// check for NULL
strcpy(S->charElements[S->size++], element);

关于c - 我的推送函数总是将最新的元素推送到堆栈的每个值上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13070747/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com