使用char指针就可以完成计算文件的长度和复制,但是换成string运行的时候就什么都没显示,这两个区别?

MerlinQiu 2013-12-07 06:22:42
#include<iostream>
#include<cstring>
#include<fstream>
using namespace std;
class A{
private:
public:
void Strength(char* targetFileName)
{
char ch;
int i=0;
ifstream ioFile;
ioFile.open( targetFileName,ios::in);
while(!ioFile.eof())
{
ch=ioFile.get ();
i++;
}
cout<<i<<endl;
ioFile.close();
}
void copy(char * srcFileName,char* targetFileName)
{
char ch1,ch2;


ifstream iFile;
ofstream oFile;
iFile.open(srcFileName,ios::in);


oFile.open (targetFileName,ios::out);
while(!iFile.eof())
{
ch1=iFile.get();
oFile.put(ch1);
}
oFile.close ();
iFile.close();


}
};
void main()
{
A a;
a.Strength("C:\\xyz.txt");
a.copy("C:\\xyz.txt","D:\\xyz.txt");
}

运行的结果:


复制和计算长度都可以,但是换成string就不行了~~~
...全文
220 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lm_whales 2013-12-14
  • 打赏
  • 举报
回复
targetFileName.c_str() 就是 返回 string 类内部的字符串的一个函数,是个访问函数(const 函数),返回 const char *。 targetFileName 是个 string string大概有如下结构,实际上是个模板类,这里的代码只是示意图。 class string{ size_t capability;//容量,避免频繁分配内存。 size_t size; //实际字符串长度。 ....... //可能还有引用计数。 char *str;//包含一个指针,用于存放字符串首地址,是动态分配的内存,或者共享的别的string 对象的内存。 const char *c_str()const {return str;};//这个返回字符串,以便使用。 ........ }; targetFileName.c_str() 返回string 对象 targetFileName内部存储字符串的指针。 这里 就是那个 str;就是实际的字符串。 这只是成员函数的调用方式,很平常的。 函数名字叫 c_str,就是C 字符串的意思。 比如 targetFileName =“dst.txt” targetFileName.c_str() 就是那个targetFileName内部的指针str ,字符串值为“dst.txt”。
MerlinQiu 2013-12-13
  • 打赏
  • 举报
回复
恩,这个懂了,但是targetFileName.c_str()这个没见过,能帮我解释一下吗?
lm_whales 2013-12-12
  • 打赏
  • 举报
回复
引用 8 楼 u012828882 的回复:
就是讲目标文件复制成那个src文件啊,还有就是扩展名也没问题啊。。。参数没有使用?那应该怎么使用啊?
引用 6 楼 u012828882 的回复:
改了这样还是不行啊: void copy(const string & srcFileName,const string & targetFileName) { char ch1; ifstream iFile; ofstream oFile; //iFile.open("srcFileName",ios::in); //引号是多余的 iFile.open(srcFileName,ios::in); //如果还是不行,改为 oFile.open (srcFileName.c_str(),ios::out); //oFile.open ("targetFileName",ios::out);//引号是多余的 oFile.open (targetFileName,ios::out); //如果还是不行,改为 oFile.open (targetFileName.c_str(),ios::out); while(!iFile.eof()) {ch1=iFile.get(); oFile.put(ch1); } iFile.close (); oFile.close(); } 运行还是什么都没显示,文件复制也没有成功。。。
"srcFileName" 只是字符串,和函数参数srcFileName没有任何关系。 比如 srcFileName ="in.txt" "srcFileName" 还是"srcFileName" 你想打开文件 "in.txt", 而不是无扩展名的 "srcFileName" 所以就打开失败了。
MerlinQiu 2013-12-09
  • 打赏
  • 举报
回复
就是讲目标文件复制成那个src文件啊,还有就是扩展名也没问题啊。。。参数没有使用?那应该怎么使用啊?
lm_whales 2013-12-09
  • 打赏
  • 举报
回复
引用 6 楼 u012828882 的回复:
改了这样还是不行啊: void copy(const string & srcFileName,const string & targetFileName) { char ch1; ifstream iFile; ofstream oFile; iFile.open("srcFileName",ios::in);//"srcFileName" 这个文件存在么???? oFile.open ("targetFileName",ios::out); while(!iFile.eof()) {ch1=iFile.get(); oFile.put(ch1); } iFile.close (); oFile.close(); } 运行还是什么都没显示,文件复制也没有成功。。。
PS: 参数没有使用,结果文件名是"srcFileName"和"targetFileName" 输入文件应该不存在吧,注意你的文件名中没有扩展名。
MerlinQiu 2013-12-09
  • 打赏
  • 举报
回复
改了这样还是不行啊: void copy(const string & srcFileName,const string & targetFileName) { char ch1; ifstream iFile; ofstream oFile; iFile.open("srcFileName",ios::in); oFile.open ("targetFileName",ios::out); while(!iFile.eof()) {ch1=iFile.get(); oFile.put(ch1); } iFile.close (); oFile.close(); } 运行还是什么都没显示,文件复制也没有成功。。。
lm_whales 2013-12-08
  • 打赏
  • 举报
回复
//void copy(char * srcFileName,char* targetFileName) 这样试试:
void copy(const string &src,const string & dst)
{
   ifstream iFile;
   ofstream oFile;
   iFile.open(src,ios::in);
   oFile.open (dst,ios::out);
   while(iFile)
  { 
     oFile.put(iFile.get());
  }
}
MerlinQiu 2013-12-07
  • 打赏
  • 举报
回复
小弟愚钝还是不懂啊,能不能帮我把char改成string,而运行结果也是和char一样的啊?
赵4老师 2013-12-07
  • 打赏
  • 举报
回复
string是对象,不是一段内存。
MerlinQiu 2013-12-07
  • 打赏
  • 举报
回复
这样说是不是可以认为string里包括了char,但是我把程序的char型改成string,再把相应的格式改正确,为什么这样的运行结果就不对了呢?
allenltiverson 2013-12-07
  • 打赏
  • 举报
回复
char* 跟string是不同的概念。string是stl里面封装了对char*操作的模板类,不能简单以为char*就是string。如果传递string需要调用它的c_str()函数转换为const char*。

65,208

社区成员

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

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