关于string::c_str()的问题
有函数:
string fun()
{
.........
}
现在这样使用
printf("%s", fun().c_str());
不知道有没有问题?fun返回的string对象为临时变量,它在函数调用结束便被析构了,所以通过函数c_str返回的const char*指针指向的内存也是无效的,但是为什么这样使用在程序中却没有问题?
[解决办法]
这个临时对象不是在函数调用结束被析构的,被析构的是函数内部待返回的局部变量,这个临时对象在return语句处被构造(使用复制构造函数从函数内部待返回的局部变量复制),在printf语句执行完毕时被析构。
[解决办法]
你这里返回的变量又不是引用,虽然函数体内的临时变量被析构了,但是他的值作为返回值已经复制给了函数体外的临时变量...
fun().c_str()相当于
string temp = fun();
temp.c_str();
然后析构掉temp;
如果你返回的是引用,就会有问题。