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] = '\0';
top = top - 1;
}
char *push(char input[]) {
top++;
memcpy(stack[top], input, 100);
}
嗨,这是一个非常复杂的项目的简化代码。但我相信我得到了上面的重要部分。最终,我在一个名为 stack 的数组中有字符串“20”和“15”。我想将数组的这些元素复制到 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--;
}
推荐阅读
- jquery - 将每个输入附加到壁橱表单中,对我不起作用
- entity-framework - 在 EF 核心中获取正在进行的事件
- java - 如何在 java.util 程序中传递基于类的数组列表的参数
- c# - Vue 组件不呈现...呈现为空 HTML 注释
- c++ - 在 OSX 上从源代码构建 GIMP 2.10 在“gimp-debug-tool-2.0”上失败
- android - 不要使用移动数据
- query-string - 访问 ASP.NET Core 中的原始查询参数
- r - 带有子字符串 R 的 ifelse
- ios - TableViewController MVC - 斯威夫特
- html - 角度:粘性导航栏不起作用(在 localhost:4200 中不显示任何内容),但如果像普通 HTML 一样放入记事本,则可以,为什么?