C++中的string到底是变量还是常量?

lijinghan21 2010-03-25 09:10:33
各位大侠,小弟初学C++,看到很多资料上都把char型数组和string类定义的变量等同起来,但是我这个IO程序中就不等同了,请问C++中的string到底是变量还是常量呢?如果string对于C++来说是字符串变量,那我的程序错在哪里呢?

#include<iostream>
#include<fstream>
#include<cstdlib>
#include<string>
using namespace std;
int main()
{
using namespace std;
char srcname[20]; //用char型数组是可以的
char dstname[20];
// string srcname("ss"); //换成string类型就不行了吗?
// string dstname("ssa");
ifstream input;
ofstream output;
cout<<"文件拷贝即将进行\n\n";
cout<<"请输入源文件名(包括路径和扩展名):\n";
cin>>srcname;

cout<<"请输入目标文件名(包括路径和扩展名):\n";
cin>>dstname;

input.open(srcname,ios::binary);
if(input.fail())
{
cout<<"打不开输入文件\n";
exit(1);
}

output.open(dstname,ios::binary);
if(output.fail())
{
cout<<"不能写入输出文件\n";
exit(1);
}

output<<input.rdbuf();

input.close();
output.close();
return 0;
}
...全文
628 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
superhard_d 2010-03-26
  • 打赏
  • 举报
回复
open方法没有重载string类型的参数,所以必须用string的方法将其转换成它能接受的参数类型
TW_00001 2010-03-25
  • 打赏
  • 举报
回复
string是C++的stl里面的

所谓常量与否要看编译的时候是否是需要确定的
jipin2006 2010-03-25
  • 打赏
  • 举报
回复
在C++中,input.open()中第一个参数要求是const char*,而用直接用string对象并不是const的,因此要用string类的一个名为c_str()的函数,返回的类型相符,7楼的代码解答是能编译通过的。
cy330206 2010-03-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 mstlq 的回复:]
string在c++里面是一种变量的类型
[/Quote]
楼主可以去看看我提的问题,,貌似错不多,,呵呵
昵称很不好取 2010-03-25
  • 打赏
  • 举报
回复
各有千秋吧,string类有string的好处,不用内存释放,比较简洁,有一堆方法可以用
c_str()取的是临时地址,不保存使用就没什么问题
yuzl32 2010-03-25
  • 打赏
  • 举报
回复

#include<iostream>
#include<fstream>
#include<cstdlib>
#include<string>
using namespace std;
int main()
{
using namespace std;
//char srcname[20];
//char dstname[20];
string srcname("ss");
string dstname("ssa");
ifstream input;
ofstream output;

cout<<"文件拷贝即将进行\n\n";
cout<<"请输入源文件名(包括路径和扩展名):\n";
cin>>srcname;

cout<<"请输入目标文件名(包括路径和扩展名):\n";
cin>>dstname;

//相应的更改open接收的是c字符串
input.open(srcname.c_str(),ios::binary);
if(input.fail())
{
cout<<"打不开输入文件\n";
exit(1);
}

//相应的更改
output.open(dstname.c_str(),ios::binary);
if(output.fail())
{
cout<<"不能写入输出文件\n";
exit(1);
}

output<<input.rdbuf();

input.close();
output.close();
return 0;
}
lijinghan21 2010-03-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 thefirstz 的回复:]
string是一个class~~
你之所以不对,是因为open不接受string作为参数,用srcname.c_str()试试
[/Quote]

对了!谢谢啊,不过看到网上说这个c_str()函数好像是Inprise公司不推荐的做法。那么老练的程序员是不是一般采用char型数组或者指针啊?帮忙再回答一下好吗?分给你了
lovesi3344 2010-03-25
  • 打赏
  • 举报
回复


[Quote=引用 3 楼 mstlq 的回复:]
string在c++里面是一种变量的类型
[/Quote]
liukai_happy 2010-03-25
  • 打赏
  • 举报
回复
string 是一种类结构, 方便使用 , 其实 string 能够进行的 操作 , 用 char a[] 数组 和其他造作 也可以实现!!
mstlq 2010-03-25
  • 打赏
  • 举报
回复
string在c++里面是一种变量的类型
昵称很不好取 2010-03-25
  • 打赏
  • 举报
回复
string是一个class~~
你之所以不对,是因为open不接受string作为参数,用srcname.c_str()试试
zkzhfx 2010-03-25
  • 打赏
  • 举报
回复
数组与字符串不一样

64,683

社区成员

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

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