有关string的问题

tgwz973011 2010-04-07 10:17:47
#include <iostream>
#include <string>
using namespace std;
int main()
{void change(string &,string &);
string str1=" ",
str2=" ",
str3=" ";
//string str1,str2,str3;
char *p1=&str1[0],*p2=&str2[0],*p3=&str3[0];
cout<<"input three line:"<<endl;
gets(p1);
gets(p2);
gets(p3);
if(str1>str2)change(str1,str2);
if(str1>str3)change(str1,str3);
if(str2>str3)change(str2,str3);
cout<<endl<<"Now,the order is:"<<endl;
cout<<str1<<endl<<str2<<endl<<str3<<endl;
return 0;
}
void change(string &st1,string &st2) /* 交换两个字符串 */
{string st;
st=st1;st1=st2;st2=st;
}
为什么必须使用
string str1=" ",
str2=" ",
str3=" ";
使string初始化后才正确,如果使用string str1,str2,str3;不定义的话,在输入一行字符后会发生内存错误?string必须初始化吗?谢谢,请求回答
...全文
89 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
小轩窗1 2010-04-07
  • 打赏
  • 举报
回复
用strING变量作为函数的实参,将实参传递给形参的时候是值传递方式,也就是单向传递,在调用函数时,如果改变了形参的值,该值无法返回给主调函数,建议讲实参改为指向string变量的指针试试
赵4老师 2010-04-07
  • 打赏
  • 举报
回复
单步调试和设断点调试是程序员必须掌握的技能之一。
白云飘飘飘 2010-04-07
  • 打赏
  • 举报
回复
一定要这样用的话,当然要初始化,要保证读入的字符数不超过string的内部缓冲区.用str1.resize(n)比较方便
my1111ym 2010-04-07
  • 打赏
  • 举报
回复

string str1=" ",
str2=" ",
str3=" ";
//string str1,str2,str3;
char *p1=&str1[0],*p2=&str2[0],*p3=&str3[0]; //这里用了str1[0],str2[0],str3[0]的值,所以要初始化,不然p1,p2,p3就会乱指了!

还有lz的代码风格有待改善,既然用了string,就不要用char *了,看得有点迷糊~~
linyongzuo 2010-04-07
  • 打赏
  • 举报
回复
char *p1=&str1[0],*p2=&str2[0],*p3=&str3[0];//如果不初始化。你说这个指针跑哪去~
fox000002 2010-04-07
  • 打赏
  • 举报
回复
好无语

lz 这是要做什么

用了 string,又不用 string 的功能

变成动态字符数组了,也没有越界检查

char *p1=&str1[0],*p2=&str2[0],*p3=&str3[0];
最帅马老师 2010-04-07
  • 打赏
  • 举报
回复
应该不用强制初始化吧,可能是string实现的问题,你用的环境是?

64,639

社区成员

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

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