从函数返回一个const char *

时间:2014-04-10 13:07:21

标签: c++ stdstring

我必须替换一些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()的返回值?

2 个答案:

答案 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 []释放内存是个好方法。