首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

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

使用char指针就可以完成计算文件的长度和复制,但是换成string运行的时候就什么都没显示,这两个区别?
#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就不行了~~~
[解决办法]
char* 跟string是不同的概念。string是stl里面封装了对char*操作的模板类,不能简单以为char*就是string。如果传递string需要调用它的c_str()函数转换为const char*。
[解决办法]
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”。

热点排行