c++中istringstream流问题,求教

jiesuonan 2013-06-04 03:15:21
#include<iostream>
#include<sstream>
#include<string>
#include<iomanip>
using namespace std;

int main()
{
string s="abcdefgchijklmnopqrstuvwxyz";
char a,*p=&a;
istringstream input(s);

input>>p;

cout<<p<<endl;
cout<<setfill('*')<<setw(30)<<'*'<<endl;
cout<<s<<endl;
return 0;
}

为什么我将input里面的数据交给p后,s变量的地址就发生了变化,里边成了空的,cout<<s<<endl;就没办法输出;如果将char a,*p=&a;注释掉,改为string s1;input>>s1;就能正确?是不是>>重载,其右值只能为string类型,那s的地址怎么会变?求解答
...全文
246 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiesuonan 2013-06-06
  • 打赏
  • 举报
回复
引用 8 楼 huwji_stanley_apple 的回复:
堆栈上的对象内存布局大概如下: 因为a只有1个字节,包括4字节对齐后也只有4字节的空间,执行 input>>p 后肯定会把后面的s对象覆盖掉,所以导致异常现象
嗯,后来我也想到了,只是感觉内存应该不是太小吧,咋就这么巧刚好就把s的内存占了、、、
jiesuonan 2013-06-06
  • 打赏
  • 举报
回复
引用 7 楼 cqdjyy01234 的回复:
目测是因为数组越界,因为p为指针,给p赋值,其实是读取字符串,但是p实际上指向的是a,是一个字符,于是数组讲后面的数据覆盖了,可能后面正好是s的数据,因为s变得不可用。
咋两想的差不多、、、
  • 打赏
  • 举报
回复
堆栈上的对象内存布局大概如下:

因为a只有1个字节,包括4字节对齐后也只有4字节的空间,执行
input>>p
后肯定会把后面的s对象覆盖掉,所以导致异常现象
cqdjyy01234 2013-06-05
  • 打赏
  • 举报
回复
目测是因为数组越界,因为p为指针,给p赋值,其实是读取字符串,但是p实际上指向的是a,是一个字符,于是数组讲后面的数据覆盖了,可能后面正好是s的数据,因为s变得不可用。
jiesuonan 2013-06-05
  • 打赏
  • 举报
回复
引用 3 楼 zhao4zhong1 的回复:
To set a breakpoint when a variable changes value 1.From the Edit menu, click Breakpoints. 2.Click the Data tab of the Breakpoints dialog box. 3.In the Expression text box, type the name of the variable. 4.Click OK to set the breakpoint.
这是调试方法?还是、、、?求教
jiesuonan 2013-06-05
  • 打赏
  • 举报
回复
引用 2 楼 mougaidong 的回复:
给指针p分配了多少内存?
应该就是一个字符的大小吧,我只是输出的时候让它全部输出,我就是奇怪为是么在向p赋值后,s里面的数据都变了,连地址都变了、、、菜鸟求问
jiesuonan 2013-06-05
  • 打赏
  • 举报
回复
引用 1 楼 mougaidong 的回复:
char a,*p=&a; 这是想干嘛?
只是相对指针初始化,我就想将s里面的数据放入指针指向的内存中,然后将s的值在输出
赵4老师 2013-06-04
  • 打赏
  • 举报
回复
To set a breakpoint when a variable changes value 1.From the Edit menu, click Breakpoints. 2.Click the Data tab of the Breakpoints dialog box. 3.In the Expression text box, type the name of the variable. 4.Click OK to set the breakpoint.
turing-complete 2013-06-04
  • 打赏
  • 举报
回复
给指针p分配了多少内存?
turing-complete 2013-06-04
  • 打赏
  • 举报
回复
char a,*p=&a; 这是想干嘛?

64,643

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧