gpt4 book ai didi

c++ - cout char* 即使声明为常量也是不同的

转载 作者:太空宇宙 更新时间:2023-11-04 16:13:00 24 4
gpt4 key购买 nike

我有一个非常简单的代码片段:

#include <iostream>

using namespace std;

string getString() {
return "test";
}

int main(){
const char* testString = getString().c_str();
cout << "string 1:" << testString << endl;
string dummy[] = {"1","2","0"};
cout << "string 2:" << testString << endl;
return 0;
}

我希望这两个 cout 会打印相同的输出,但我得到的输出是

string 1:test
string 2:1

谁能解释为什么会这样?另外,我观察到两件事:

1) 如果 dummy[]int 类型,那么它们将打印与预期完全相同的字符串 test

2) 如果我首先将 getString() 分配给一个字符串变量,然后将 main 中的第一行更改为 const char* testString = variable.c_str();然后他们将计算出与预期相同的字符串。

最佳答案

行为未定义。

const char* testString = getString().c_str();

getString 返回一个临时对象,该对象在评估完成时被销毁。作为结果。 testString 指向已销毁对象的内部,导致未定义的行为。

在实践中,数据可能会在该地址保留一段时间,这就是为什么第一个 cout 给出正确性的错觉。

关于c++ - cout char* 即使声明为常量也是不同的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26146217/

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