#include <string>#include <iostream>using namespace std;string getString(){ char s[] = "Hello World!"; return s;}int main(){ cout << getString() << endl;}
我的问题是,这总是有效吗?通常,如果你返回一个在本地声明的C字符串,你可能会遇到一些未定义的行为,但在这种情况下仍然是一个问题,因为它是通过字符串构造函数运行的(并且可能)被复制到动态内存中?
解决方法return s;
该行相当于:
return std::string(s);
这将是字符串的副本,所以没关系.
参考:http://en.cppreference.com/w/cpp/string/basic_string/basic_string(构造函数#5)
Constructs the string with the contents initialized with a copy of the null-terminated character string pointed to by s.
编辑:还有一个细节.你提到
copIEd into dynamic memory?
也许答案可能是真的无关紧要.
std :: string提供的语义没有对此做出任何规范,它只是保证它可以被复制/移动并以一致的方式访问.如何实现这一点取决于库实现者.
事实上,std :: string的流行实现使用了一种称为“小字符串优化”的东西.在一定长度下的字符串存储在字符串对象本身中的位置.
总结以上是内存溢出为你收集整理的返回具有C字符串返回值的函数的本地C字符串全部内容,希望文章能够帮你解决返回具有C字符串返回值的函数的本地C字符串所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)