转换成C风格的char *字符串
本来今天想写个心情博客,楠哥走了,自习结束了,但是写了半天也没有感觉,还是赶紧写点东西吧。简单的一个:
String类提供了几个成员函数,用于将string类的对象转换成C风格的基于指针的字符串。C++字符串不要求以null结尾。如果某个函数的实参是一个基于指针的字符串,则这些转换函数就可排上用场。
下面的demo演示了将string对象转换成基于指针的字符串
程序声明了一个字符串、一个int值和两个char指针。字符串对象string1被初始化为“STRING”,ptr1被初始化为0,而length被初始化为string1的长度。程序中动态分配的内存,足以容纳一个基于指针的、与string1内容相同的字符串,并将这块内存与char 指针ptr2绑定在一起。
#include <iostream>
#include <string>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
string string1("STRINGS");
const char *ptr1 = 0;
int length = string1.length();
char *ptr2 = new char[length+1];
string1.copy(ptr2,length,0); //利用string类的copy成员函数,将string1对象复制到ptr2指向的字符数组
ptr2[length] = '\0'; //在数组中加了一个结尾的null字符
cout <<"string string1 is "<< string1
<<"\nstring1 converted to a C-Style string is "
<<string1.c_str() <<"\nptr1 is "; //利用c_str函数获得一个const char*指针,它指向一个null结尾的C风格的字符串,与string1内容相同
ptr1 = string1.data();//将const char *指针ptr1赋值为string类的data成员函数返回的指针。这个成员函数返回一个非null结尾的C风格的字符数组
for (int i=0;i<length;i++)
{
cout<<*(ptr1+i);
}
cout<<"\nptr2 is "<<ptr2<<endl; //输出ptr2指向的C风格的字符串
delete [] ptr2;
system("pause");
return 0;
}
运行结果:
参考资料:
《c++程序员教程》 电子工业出版社 张良华 译 P510-511