Копирование элементов стека в другой массив без изменения значений - PullRequest
0 голосов
/ 13 февраля 2020
#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);
}

Привет, это упрощенный код очень сложного проекта. Но я считаю, что я получил важные части выше. В конечном итоге, у меня есть строки "20" и "15" в массиве, называемом стеком. Я хочу скопировать эти элементы массива в tpStack. Я успешно это делаю (это работает). Однако когда я вызываю pop (), элементы в tpStack больше не равны «20» и «15». Я новичок в C, но я предполагаю, что это связано с каким-то распределением памяти. Помилуй, я не лучший программист.

1 Ответ

0 голосов
/ 13 февраля 2020

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--;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...