繁体   English   中英

如何从 cpp 中的函数以 char* 形式返回字符串?

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM