我不知道这里有什么问题。
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
,其中包含&#34;标题&#34;然后附加&#34;(100)&#34;它。在此之后,我正在检索一个字符串,然后是一个&#34; C字符串&#34;,这是char
并将指针存储在window_title
中。
出了什么问题?
答案 0 :(得分:4)
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();