C++ 从字符串流中检索常量字符*

C++ Retrieve const char* from stringstream

本文关键字:常量 字符 检索 字符串 C++      更新时间:2023-10-16

我不知道这里出了什么问题。

std::stringstream ss("Title");
ss << " (" << 100 << ")";
const char* window_title = &ss.str().c_str();

我跑了make,它不开心。

 [17%] Building CXX object CMakeFiles/game.dir/src/main.cpp.o
path: error: cannot take the address of an rvalue of type 'const value_type *'
      (aka 'const char *')
          const char* window_title = &ss.str().c_str();
                                     ^~~~~~~~~~~~~~~~~
1 error generated.
make[2]: *** [CMakeFiles/game.dir/src/main.cpp.o] Error 1
make[1]: *** [CMakeFiles/game.dir/all] Error 2
make: *** [all] Error 2

据我了解,我正在创建一个带有"标题"一词的stringstream,然后在其中附加"(100)"。在此之后,我检索一个字符串,然后检索一个"C 字符串",这是一个char并将指向该字符串的指针存储在 window_title 中。

怎么了?

ss.str() 返回一个在调用后被销毁的临时对象。不应使用指向临时对象内存的指针,这是未定义的行为。此外,c_str() 已经返回指向以 null 结尾的 char 数组的指针。编译器抱怨说,您不仅试图简单地使用临时对象的内存地址,而且要获取指向此地址的指针,这是理所当然的。这样它就可以编译和工作

std::stringstream ss("Title");
ss << " (" << 100 << ")";
//Create a string object to avoid using temporary object
std::string str = ss.str();
const char* window_title = str.c_str();