簡體   English   中英

從函數返回const char *

[英]returning a const char* from a function

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

對,那是正確的。 如果您要求調用方提供一個固定大小的緩沖區,則更好,例如,調用方分配為:

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;
 }

您可以在成員函數中使用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 []釋放內存是一種好方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM