![](/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.