某项目中使用了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;
}
char op[100];
->
char * op;
op = new char[100]; //加上这个
cin>>op;
a.push(op);
a.push的元素有误,a[j]
很明显: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。