C++ 函数返回临时string调用c_str()函数的坑(VS警告:C26815 指针无关联,因为它指向已销毁的临时实例)

Posted Dontla

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ 函数返回临时string调用c_str()函数的坑(VS警告:C26815 指针无关联,因为它指向已销毁的临时实例)相关的知识,希望对你有一定的参考价值。

如:

...
#pragma warning(disable : 4996)
#include <iostream>
using namespace std;

string fun()

	string s = "are you ok";
	return s;


int main()

	const char* s1 = fun().c_str();
	cout << "s1: " << s1 << endl;

	string temp = fun();
	const char* s2 = temp.c_str();
	cout << "s2: " << s2 << endl;

VS编译运行结果:(这里s1没内容,通常是乱码!)

s1:
s2: are you ok

原因:C26815 指针无关联,因为它指向已销毁的临时实例

返回的时候必须要弄个string去接收它,不然它就直接被销毁了,相当于返回一个临时string调用c_str()后,指向内容被销毁的指针

参考文章:实战c++中的string系列–函数返回局部变量string(引用局部string,局部string的.c_str()函数)

以上是关于C++ 函数返回临时string调用c_str()函数的坑(VS警告:C26815 指针无关联,因为它指向已销毁的临时实例)的主要内容,如果未能解决你的问题,请参考以下文章

C++ c_str() 函数应用

C++ c_str() 函数应用

c++中c_str()用法,越详细越好。

c++中的c_str()

C++中的c_str()函数用法

C++怎么把string 转换为char型数组