标准头文件<cstring>包含操作c-串的函数库。这些库函数表达了我们希望使用的几乎每种字符串操作。 当调用库函数,客户程序提供的是string类型参数,而库函数内部实现用的是c-串,因此需要将string对象,转化为char*对象,而c_str()提供了这样一种方法,它返回一个客户程序可读不可改的指向字符数组的指针。
下面程序用vc6.0测试
#include<iostream>
#include<string>
using namespace std;
void f(const char* s)
{
cout<<s<<endl;
}
int main()
{
string str1="123456789";
string str2="abcdefghijk";
f((str1+"/"+str2).c_str());
const char* s=(str1+"/"+str2).c_str(); //operator+是一般返回值而不是引用,所以返回的指针是个临时对象所持有的指针.
f(s); //输出乱码,说明临时对象已析构
return 0;
}
结果:
所以为防止以外一般用拷贝来获得c_str()返回的值,如
char c[20];
string s="1234";
strcpy(c,s.c_str());