如何将string转换为C + +中的字符数组?
我想将string
转换为char
数组,但不是char*
。 我知道如何将string转换为char*
(通过使用malloc
或我的方式发布在我的代码中) – 但这不是我想要的。 我只是想将string
转换为char[size]
数组。 可能吗?
#include <iostream> #include <string> #include <stdio.h> using namespace std; int main() { // char to string char tab[4]; tab[0] = 'c'; tab[1] = 'a'; tab[2] = 't'; tab[3] = '\0'; string tmp(tab); cout << tmp << "\n"; // string to char* - but thats not what I want char *c = const_cast<char*>(tmp.c_str()); cout << c << "\n"; //string to char char tab2[1024]; // ? return 0; }
我能想到的最简单的方法是:
string temp = "cat"; char tab2[1024]; strcpy(tab2, temp.c_str());
为了安全,你可能更喜欢:
string temp = "cat"; char tab2[1024]; strncpy(tab2, temp.c_str(), sizeof(tab2)); tab2[sizeof(tab2) - 1] = 0;
好吧,我感到震惊,现在轮到我没有人真的给出了一个好的答案。 有两种情况。
-
一个恒定的字符数组对你来说足够好,所以你一起去,
const char *array = tmp.c_str();
-
或者你需要修改这个char数组,这样就不会有问题,那么就去做吧
char *array = &tmp[0];
他们都只是分配操作 ,大部分时间就是你所需要的,如果你真的需要一个新的副本,然后按照其他人的答案。
最简单的方法就是这样做
std::string myWord = "myWord"; char myArray[myWord.size()+1];//as 1 char space for null is also required strcpy(myArray, myWord.c_str());
只需将该string复制到strcpy
数组中。
str.copy(cstr, str.length()+1); // since C++11 cstr[str.copy(cstr, str.length())] = '\0'; // before C++11 cstr[str.copy(cstr, sizeof(cstr)-1)] = '\0'; // before C++11 (safe)
在C ++中避免使用C是一个更好的做法,所以std :: string :: copy应该是strcpy的select。
尝试strcpy(),但如Fred所说,这是C ++,而不是C
尝试这种方式应该是工作。
string line="hello world"; char * data = new char[line.size() + 1]; copy(line.begin(), line.end(), data); data[line.size()] = '\0';
你可以使用strcpy()
,就像这样:
strcpy(tab2, tmp.c_str());
注意缓冲区溢出。
如果事先不知道string的大小,并且它可能会变化很大,那么可以使用unique_ptr
的数组重载获得一个dynamic分配的固定大小的数组:
auto tab2 = std::make_unique<char[]>(temp.size() + 1); std::strcpy(tab2.get(), temp.c_str());
请注意,您不需要strncpy
,因为数组首先被分配的空间足够大。
那么我知道这可能比简单愚蠢,但我认为它应该工作:
string n; cin>> n; char b[200]; for (int i = 0; i < sizeof(n); i++) { b[i] = n[i]; cout<< b[i]<< " "; }