首页 > 解决方案 > 将堆栈的元素复制到其他数组而不更改值

问题描述

#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] = '\0';
    top = top - 1;
}

char *push(char input[]) {
    top++;
    memcpy(stack[top], input, 100);
}

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

标签: carraysstack

解决方案


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--;
}

推荐阅读