Как преобразовать строку в массив char в C++?
Я хотел бы, чтобы преобразовать string
to char
массив, а не char*
. Я знаю, как преобразовать строку char*
(через malloc
или то, как я разместил его в своем коде) - но это не то, что я хочу. Я просто хочу конвертировать string
to 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] = '';
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;
}
10 ответов:
самый простой способ, который я могу придумать, это:
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;
или может быть таким образом:
string temp = "cat"; char * tab2 = new char [temp.length()+1]; strcpy (tab2, temp.c_str());
хорошо, я в шоке, что никто не дал хороший ответ, теперь моя очередь. Есть два случая;
A константы char массив достаточно хорош для вас так что вы идете с,
const char *array = tmp.c_str();
или нужно изменить массив символов so constant не в порядке, тогда просто идите с этим
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());
str.copy(cstr, str.length()+1); // since C++11 cstr[str.copy(cstr, str.length())] = ''; // before C++11 cstr[str.copy(cstr, sizeof(cstr)-1)] = ''; // before C++11 (safe)
лучше избегать C в C++, так что std:: string:: copy должен быть выбор, а не strcpy.
попробуйте таким образом, это должно быть работа.
string line="hello world"; char * data = new char[line.size() + 1]; copy(line.begin(), line.end(), data); data[line.size()] = '';
вы могли бы использовать
strcpy()
, например:strcpy(tab2, tmp.c_str());
следите за переполнением буфера.
Если вы не знаете размер строки заранее, и он может сильно варьироваться, вы можете получить динамически выделенный массив фиксированного размера с перегрузкой массива
unique_ptr
:auto tab2 = std::make_unique<char[]>(temp.size() + 1); std::strcpy(tab2.get(), temp.c_str());
обратите внимание, что вам не нужно
strncpy
здесь как массив выделяется быть достаточно большим в первую очередь.