我必须替换一些char数组代码。所以说我有一个具有std :: string成员变量的类。
class foo
{
private:
std::string _sBar;
public:
const char* getBar() const { return _sBar.c_str(); }
};
现有代码期望在字符串访问器函数中返回const char*
,因此我无法返回const std::string
引用。
但是有没有一些规则,当堆栈展开时你不能再信任_sBar.c_str()
的返回值?
答案 0 :(得分:2)
是的,这是对的。如果你要求调用者提供一个固定大小的缓冲区,那就更好了,调用者分配为:
const int MAX = 1000; // choose some suitable value
char buff[MAX];
调用者有一个foo对象,
foo a;
...
a.getBar(buff, MAX);
...
您将getBar定义为:
void getBar(char *buffer, int size) const {
strncpy(buffer, _sBar.c_str(), size -1);
buffer[size -1] = 0;
}
答案 1 :(得分:0)
您可以在成员函数中使用new []运算符复制该字符串,并且它将独立于类对象进行存储。在课堂上:
plublic:
const char* getBar() const {
char * str = new char[_sBar.length()+1];
strcpy(str, _sBar.c_str());
return str;}
主要:
foo object;
///some code
const char* bar = object.getBar();
///some code
delete [] bar;
注意使用delete []释放内存是个好方法。