gpt4 book ai didi

c++ - 将字符串连接到 char*

转载 作者:搜寻专家 更新时间:2023-10-31 00:12:01 24 4
gpt4 key购买 nike

我是一名 C# 开发人员,当我在 C++ 中运行以下代码时,我感到很奇怪:

std::string original = "Hello";

std::string st = original + "World";
const char *c = st.c_str();

const char *c2 = (original + "World").c_str();

std::cout << "c = '" << c << "'" << std::endl;
std::cout << "c2 = '" << c2 << "'" << std::endl;

我得到以下输出:

c  = 'HelloWorld'
c2 = ''

在 C# 中,类似的构造将导致 cc2 具有相同的值(“Hello World”)。我的猜测是 (original + "World") 的结果范围在右边 ) 结束,所以 c_str() 是调用无效输入。那是对的吗?除了创建变量来保存临时结果之外,还有更好的方法来实现这一点吗?

谢谢!

最佳答案

My guess would be that the scope of the result of (original + "World") ends on the right ), so c_str() is called on an invalid input. Is that correct?

不完全是,但很接近。 c_str() 本身没问题,但是在语句结束后该指针变得无效,因此之后使用 c2 会导致 UB。

Is there a better way of achieving this other than creating variables to hold temporary results?

您可以将其分配给 const 引用:

const std::string &ref = original + "World";
const char *c2 = ref.c_str();

但我不认为这比创建变量更好。

关于c++ - 将字符串连接到 char*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31812314/

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