C++中如何从函数内将std::string类型值以char*格式返回?
错误原因
该编译报错的核心是std::string是C++标准库封装的字符串类,和原生char*字符指针属于完全不同的类型,不支持直接隐式转换。
解决方案
可以根据你的使用场景选择下面的处理方式:
如果你只需要只读访问字符串内容
将返回类型修改为const char*,调用std::string内置的c_str()方法返回其内部存储的C风格字符串指针即可:const char* returnString(string str) { str += 'c'; return str.c_str(); }注意:该写法返回的指针指向函数局部参数
str的内部内存,函数执行结束后str会被销毁,返回的指针会变成野指针,仅适合调用后同步使用返回值,不可长期保存。如果你需要可修改的
char*指针
可以主动申请动态内存拷贝字符串内容后返回:#include <cstring> char* returnString(string str) { str += 'c'; // 申请内存时需要额外多1位存储字符串结束符'\0' char* res = new char[str.size() + 1]; strcpy(res, str.c_str()); return res; }注意:该方案返回的指针使用完毕后,需要调用
delete[]手动释放内存,否则会出现内存泄漏。最优安全方案
若无强制要求返回char*,优先保留原std::string的返回类型,需要使用C风格指针时再在调用侧临时转换,从根源上避免内存安全问题。
内容的提问来源于stack exchange,提问作者Ritik Srivastav
相关产品推荐
相关产品推荐

