c_str()使用举例

 

实际应用中这个问题也难以避免,很多时候我们还是需要将string类型的转化为 char*来实现自定义的操作,C++标准库也为了和之前用C写的程序兼容,于是可以用stringc_str()函数。

 

string var = “Olympic”;

 

char *ptr = var.c_str(); //还不能被编译

 

但是c_str()为了防止意外地修改string对象,返回的是const指针,所以上面这段代码是不能被编译的。正确的应该是用const指针。

 

string var = “Olympic”;

 

const char *p = var.c_str(); //Correct!

 

这个c_str()方法在C++IO流操作上也被广泛应用。

 

在打开文件时,如果要指定文件名,可以用C风格的字符串。如果用到string类型的字符串作为文件名时,就必须调用c_str()方法将其转换为一个C风格字符串。

 

/*

** 编写程序读入一组string数据,并将它们存储在vector中,接着,把该vector对象复

** 制给一个字符指针。为vector中的每个元素创建一个新的字符数组,并把vector元素

** 的数据复制到相应的字符数组中,最后把指向该数组的指针插入字符指针数组

*/

#include <iostream>

#include <string>

#include <vector>

#include <cstring>

 

using namespace std;

 

int main()

{

    vector<string> svec;

    string str;

 

    while(cin >> str) //熟人vector元素

    {

        svec.push_back(str);

    }

 

    char **pps = new char* [svec.size()]; //创建指针数组

 

    //处理vector元素

    char **ppt = pps;

    for(vector<string>::iterator iter = svec.begin(); iter != svec.end(); iter++)

    {

        char *p = new char[(*iter).size() + 1]; //创建字符数组

        strcpy(p, (*iter).c_str()); //vector的每个元素复制到字符数组中

 

        *ppt++ = p; //将指向字符数组的指针插入到字符数组

    }

   

    //输出并释放字符数组

    for(ppt = pps; ppt != pps + svec.size(); ppt++)

    {

        cout << *ppt << endl;

        delete [] (*ppt); //别忘了[],否则释放不掉

    }

 

    delete [] pps; //释放指针数组

   

    return 0;

}

你可能感兴趣的:(c,vector,String,delete,iterator,存储)