gpt4 book ai didi

c++ - 使用 c_str 时为 "Use & to create a pointer to a member"

转载 作者:太空宇宙 更新时间:2023-11-03 10:24:26 24 4
gpt4 key购买 nike

我正在尝试通过从字符串强制转换来将 char* 添加到 char* 的 vector 中。这是我正在使用的代码:

vector<char*> actionLog;

// lots of code

int value = ...

// lots of code

string str = "string";
cout << str << value << endl;
str += std::to_string(player->scrap);
actionLog.push_back(str.c_str());

问题是我在 push_back 行收到指定的“使用 & 创建指向成员的指针”错误。 str.c_str 应该返回一个 char*,这是 actionLog 使用的类型。我要么对 c_str 的工作方式有误,要么做错了其他事情。推送到 actionLog with

actionLog.push_back("something");

工作正常,但不是我提到的那样。我做错了什么?

编辑:我实际上是将 c_str() 用作函数,我只是错误地复制了它

最佳答案

您尝试做的事情实际上存在几个问题。

  1. 首先,c_str是成员函数。你必须调用它,使用 () : str.c_str() .
  2. c_str()返回 const char* ,因此您将无法将其存储在 vector<char*> 中.这样你就不能破坏 std::string通过以意想不到的方式改变它的内部结构。
  3. 你真的不应该存储 c_str() 的结果.它仅在您执行一些非 const 操作之前保持有效。在 std::string 上操作它来自。 IE。如果您更改 std::string 的内容, 然后尝试使用 vector 中的相应元素, 你有 Undefined Behaviour !从您布置示例的方式来看,它看起来像是 string 的生命周期将比 vector 的生命周期短得多, 所以 vector会指向一些甚至不再存在的东西。

也许只使用 std::vector<std::string> 会更好.如果你不需要原件 string在此之后,你甚至可以 std::move 它进入 vector ,并避免额外的复制。


顺便说一句,请重新考虑您对通常被认为是不良做法的使用: using namespace std; endl (这些是解释的链接)。后者有点争议,但至少了解原因并做出明智的决定。

关于c++ - 使用 c_str 时为 "Use & to create a pointer to a member",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42829895/

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