【发布时间】:2017-04-03 19:08:36
【问题描述】:
我正在尝试将 std::string 转换为 c 字符串(我的真正问题更接近 this;我正在尝试解决方法)。
- 如何将
std::string存储为字符数组? -
为什么 std::string.data() 和 std::string.c_str() 返回
char [(<anonymous> + 1)]而不是预期的const char*?还是我把这些混在一起了,如果是这样,我该如何处理这些类型?#include <string> #include <iostream> int main() { std::string sstring = "I'm an std string!"; char cstring[sstring.size()]; cstring = sstring.c_str(); std::cout << std::string(sstring.c_str()); return 0; }
编译结果
scratch.cpp:10:11: error: incompatible types in assignment of ‘const char*’ to ‘char [(<anonymous> + 1)]’
我找不到相关的、预先存在的问题。
【问题讨论】:
-
std::string::data()和std::sring::c_str()返回const char*。 -
你认为
.c_str()为什么会返回char [(<anonymous> + 1)]? -
你为什么要分配一个指向数组的指针?
-
这是一个公然的XY problem 场景。请说出你真正的问题。
-
在char数组之间复制cstrings的正确方法是
std::strcpy。cstring = sstring.c_str();语句试图直接分配给一个数组,但 c 数组是不可分配的。请注意,char cstring[sstring.size()];不是标准 c++,但一些编译器支持它作为扩展。它不是便携式的。
标签: c++ string c++11 c-strings