[英]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.