【发布时间】:2021-03-15 08:49:45
【问题描述】:
为什么下面的代码是错误的?
string tag = "hello"; string s = (char*)tag.c_str();
这是什么意思:storing addresses to internal storage of temporary string objects is wrong.
有人可以帮忙吗?在上述转换过程中究竟发生了什么?
【问题讨论】:
-
我认为错误信息不正确。什么在生产它?当然,您不需要
(char*)演员表。在这两种情况下,所发生的只是分配了新的存储空间并将字符复制到新的存储空间,因此没有存储地址。 -
(char*)tag.c_str()是什么意思?c_str()已经返回一个const char*并且std::string有一个构造函数,它采用const char*。但是否则你的代码是好的,你没有发布的代码中一定有不同的错误。 -
为什么要将
c_str()指针转换为非常量char*?c_str()返回一个const char*,std::string有一个构造函数和赋值运算符,它们接受const char*作为输入。string s = tag.c_str();可以正常工作(但您应该改用string s = tag;)。 -
该消息是否准确地引用了该代码?在我看来,您似乎有一个过于敏感的静态分析工具。