Как преобразовать строку в массив 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 71

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());

хорошо, я в шоке, что никто не дал хороший ответ, теперь моя очередь. Есть два случая;

  1. A константы char массив достаточно хорош для вас так что вы идете с,

    const char *array = tmp.c_str();
    
  2. или нужно изменить массив символов 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.

просто скопируйте строку в массив с помощью strcpy.

попробуйте таким образом, это должно быть работа.

string line="hello world";
char * data = new char[line.size() + 1];
copy(line.begin(), line.end(), data);
data[line.size()] = ''; 

попробуйте strcpy (), но, как сказал Фред, это C++, а не C

вы могли бы использовать 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 здесь как массив выделяется быть достаточно большим в первую очередь.

Ну я знаю, что это может быть довольно стремно чем и просто, но я думаю, что это должно работать:

string n;
cin>> n;
char b[200];
for (int i = 0; i < sizeof(n); i++)
{
    b[i] = n[i];
    cout<< b[i]<< " ";
}