使用char指针就可以完成计算文件的长度跟复制,但是换成string运行的时候就什么都没显示,这两个区别
使用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”。
#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”。