![](/img/trans.png)
[英]How can I make function that take a string and return a char array
[英]How can I return string as char* from a function in cpp?
例如,
如果str = "ab"
在函數returnString()
傳遞
我們有一個函數定義,如
string returnString(string str)
{
str+='c';
return str;
}
輸出:- abc
但如果我們有功能
char* returnString(string str)
{
str+='c';
return str;
}
會給出如下錯誤:
[Error] cannot convert 'std::string' {aka 'std::__cxx11::basic_string<char>'} to 'char*' in return***
我該如何解決這個問題?
您可以使用str.data()
或str.c_str()
來獲取指向第一個字符的指針,但永遠不要在函數之外返回它。 一旦您的字符串被破壞(仔細看, str
是函數堆棧上的本地副本),您就會引發非常迅速的訪問沖突,如果您很幸運的話。
如果您嘗試與 C API 交互,您可以在退出函數之前strdup
該指針,但請確保您了解新指針需要在稍后由您free
。
沒有從std::string
類型到char *
或const char *
類型的隱式轉換。
所以編譯器發出錯誤
[Error] cannot convert 'std::string' {aka 'std::__cxx11::basic_string<char>'} to 'char*' in return
您可以通過以下方式聲明和定義函數。
const char * returnString( std::string &str )
{
str += 'c';
return str.c_str();
}
該函數更改傳遞的std::string
類型的對象。 當std::string
類型的引用對象處於活動狀態且未更改時,返回的指針將有效。
否則你需要動態分配一個字符數組。 在這種情況下,函數可以定義為例如
#include <string>
#include <cstring>
char * returnString( const std::string &str )
{
auto n = str.length();
char *p = new char[ n + 2 ];
std::memcpy( p, str.c_str(), n );
p[n] = 'c';
p[n+1] = '\0';
return p;
}
當不再需要使用操作符delete []
時,您需要記住刪除分配的字符數組。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.