转换成C风格的char *字符串

来源:互联网 发布:excel数据分栏 编辑:程序博客网 时间:2024/04/28 23:06
 

转换成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

原创粉丝点击