C++ STL 中栈的问题,求指教

某项目中使用了stl的栈,可是调试一直有问题,结果精简到这里,请问它的运行结果为什么那么奇怪,我发现那个char*换成char,以及op[100]换成op就正常了,这是为什么呢

输入
1 2
输出
2 2
是哪里出问题了吗?

#include<iostream>
#include<stack>
using namespace std;

int main()
{
    char op[100];
    stack<char*>   a;

  for (int i=0;i<2;i++)
    { 
        cin>>op;
        a.push(op);
    }


    while(!a.empty())
    {
        cout<<a.top()<<endl;
        a.pop();
    }

   return 0;
}

3个回答

a.push的元素有误,a[j]

daigualu
alg-flody 回复wlmnzf: 早晨在车上没看清楚,栈上添加的是指针变量,修改为 a.push(++op),
3 年多之前 回复
wlmnzf
会打代码的扫地王大爷 a是栈啊,a[j]是什么鬼
3 年多之前 回复

很明显:cin<<op;写入的都是同一块位置op[0],假设op[0]地址为:0x01 第一次输入1时,0x01这块地址存的值1。push到栈中,由于栈a类型为char*,
a[0]存储的是:0x01这块地址,a={'0x01'};当你第二次调用输入2时,还是写入到0x01这个地址,此时0x01地址存的值为2。push到中 a={'0x01','0x01'}。那么你去输入a当然只会看到2,2。

wlmnzf
会打代码的扫地王大爷 回复Fzuim: 里面不能存地址吗?
3 年多之前 回复
fzuim
Fzuim 回复wlmnzf: char op[100] = {0}; stack<char> a; for (int i=0;i<2;i++) { cin>>op[i]; a.push(op[i]); }
3 年多之前 回复
fzuim
Fzuim 回复wlmnzf: 很明显你这个问题,就是对同一块地址进行了多次赋值。你就算把char op[100]for里面 你去调试可以看到,都是在对同一块地址操作
3 年多之前 回复
wlmnzf
会打代码的扫地王大爷 可是像这样把char op[100];加到for循环里也没用啊 for (int i=0;i<2;i++) { char op[100]; cin>>op; a.push(op); }
3 年多之前 回复
 char op[100];
->
char * op;

op = new char[100]; //加上这个
cin>>op;
a.push(op);
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复wlmnzf: 你只分配了一次内存,每次往相同的地方存当然把之前的冲掉了。
3 年多之前 回复
wlmnzf
会打代码的扫地王大爷 char op[100];为什么不行呢,明明也可以当a*来用啊
3 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问