C++ 从字符串流中检索常量字符*
C++ Retrieve const char* from stringstream
我不知道这里出了什么问题。
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();
相关文章:
- 如何循环访问常量字符**?
- constexpr 函数获取常量字符*
- 如何计算常量字符**中的总字符数?
- QDial:如何将 int 值传递给需要常量字符*的 Qfile?
- 为什么 std::string_view 比常量字符*快?
- 函数签名与调用的函数不匹配,常量字符[]和字符*之间的区别?
- 在编译时将常量字符* 转换为常量 char_type*
- 将字符串数组传递给接受常量字符**的函数
- 错误:请求从"常量字符 [5]"转换为非标量类型"字符串"
- 字符串强制转换为常量字符*
- 使用常量字符*时退出代码 139
- 为什么我可以隐式地将字符*转换为常量字符*,但不能将无符号字符*
- 无法在声明时使用初始值设定项列表初始化常量字符*/字符串数组的向量
- 无法<string>从"常量字符 []"转换为<类名>
- 初始化常量字符* 数组
- 常量字符*的性质是什么?
- C++ 获取向量中常量字符* [ ] 的长度
- 无法将参数 1 从 WCHAR 转换为常量字符 *
- 如何在 c++ 中将向量转换为<string>常量字符* const*?
- C++将常量字符* 指针数组传递给对象