C语言 将堆栈的元素复制到其他数组中而不更改值


#include <stdio.h>
int top = 1;
char stack[0][100];
//Assume stack [0] = "20"
//Assume stack [1] = "15"
for (int i=0; i<Loi; i++) {
stack[i][99] = (char ) malloc(Loi + 1 * sizeof(char));
}
push("20");
push("15");
int main() {
for (int i=0; i<Loi; i++) {
stack[i][99] = (char ) malloc(Loi + 1 * sizeof(char));
}
push("20");
push("15");
int tt = 3;
char *tpStack[13];
for (int k = 0; k < 2; k++) {
tpStack[k] = stack[tt];
tt--;
}
pop();
pop();
printf("%s", tpStack[0]);
printf("%s", tpStack[1]);
}
void pop () {
stack[top][0] = '';
top = top - 1;
}
char *push(char input[]) {
top++;
memcpy(stack[top], input, 100);
}

嗨,这是一个非常复杂项目的简化代码。但我相信我得到了上面的重要部分。最终,我将字符串"20"和"15"放在一个名为 stack 的数组中。我想将数组的这些元素复制到 tpStack 中。我成功地做到了这一点(它有效(。但是,当我调用 pop(( 时,tpStack 中的元素不再是"20"和"15"。我是 C 的新手,但我假设这与某种内存分配有关。怜悯,我不是最好的程序员。

tpStack只包含指向stack数组的指针。当您更改stack时,它也会更改tpStack指向的内容。

如果您不希望发生这种情况,则需要复制堆栈元素。

for (int k = 0; k < 2; k++) {
tpStack[k] = malloc(sizeof stack[tt]);
memcpy(tpStack[k], stack[tt], sizeof stack[tt]);
tt--;
}