将 std::string 存储为字符数组
Storing std::string as character array
我正在尝试将 std::string
转换为 C 字符串(我的实际问题更接近于 ;我正在尝试解决方法)。
- 如何将
std::string
存储为字符数组?
为什么 std::string.data() 和 std::string.c_str() return 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)]’
我找不到相关的、已有的问题。
只需使用一个const char *
std::string sstring = "I'm an std string!";
const char * cstring = sstring.c_str();
std::cout << cstring << std::endl;
如评论中所述,这听起来像是一个 XY 问题。但是如果你只是想复制字符串,你可以这样做:
char cstring[sstring.size() + 1];
strcpy(cstring, sstring.c_str());
请注意,VLA 不是 C++ 的一部分,但 g++ 会 'go with it',请参阅答案 here。
将字符串分配给 char 数组的有效方法如下:
#include <iostream>
#include <string>
int main(int argc, char **argv) {
std::string s = "HELLO WORLD!";
char *cs = (char *)s.c_str();
std::cout << cs << '\n' << std::string(cs) << '\n';
return 0;
}
输出:
这是有效的,因为它将 const char *
转换为 char *
,因此允许分配通过,虽然这可能不是最好的方法,但它非常简单。
我正在尝试将 std::string
转换为 C 字符串(我的实际问题更接近于
- 如何将
std::string
存储为字符数组? 为什么 std::string.data() 和 std::string.c_str() return
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)]’
我找不到相关的、已有的问题。
只需使用一个const char *
std::string sstring = "I'm an std string!";
const char * cstring = sstring.c_str();
std::cout << cstring << std::endl;
如评论中所述,这听起来像是一个 XY 问题。但是如果你只是想复制字符串,你可以这样做:
char cstring[sstring.size() + 1];
strcpy(cstring, sstring.c_str());
请注意,VLA 不是 C++ 的一部分,但 g++ 会 'go with it',请参阅答案 here。
将字符串分配给 char 数组的有效方法如下:
#include <iostream>
#include <string>
int main(int argc, char **argv) {
std::string s = "HELLO WORLD!";
char *cs = (char *)s.c_str();
std::cout << cs << '\n' << std::string(cs) << '\n';
return 0;
}
输出:
这是有效的,因为它将 const char *
转换为 char *
,因此允许分配通过,虽然这可能不是最好的方法,但它非常简单。