gpt4 book ai didi

c++ - 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出?

转载 作者:行者123 更新时间:2023-11-27 22:36:54 25 4
gpt4 key购买 nike

我有代码,可以正常工作:

#include <iostream>

std::string func()
{
return "string";
}

int main()
{
std::string str = func();
std::cout << str << std::endl;
return 0;
}

但是当我将 main 函数改成这个时,我没有输出:

int main()
{
const char* c = func().c_str();
std::cout << c << std::endl;
return 0;
}

这个主要功能工作正常:

int main()
{
std::string str = func();
const char* c = str.c_str();
std::cout << c << std::endl;
return 0;
}

我在 Visual Studio 中使用多字节编码。

最佳答案

嗯,你的第二个例子是未定义的行为,由于访问释放的内存。任何事情都有可能发生。

func() 返回一个临时的 std::string,它的生命周期结束于完整表达式的末尾,将 c 变成一个悬挂指针:

const char* c = func().c_str();

使用悬挂指针,尤其是取消引用,是禁忌的:

std::cout << c << std::endl;

第一个示例通过将返回值存储在变量中并打印它来避免这种情况。
第三种方法也将返回值存储在一个变量中,即使它随后出于某些深不可测的原因使用指向拥有的序列的指针进行输出。

关于c++ - 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53130032/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com