строка — переменные типа char * в переполнении стека

В коде C ++ мне нужно получить строку от пользователя и передать ее в переменную типа char *, что-то вроде этого:

string word1;
char * word2;
int something;

cin>>word1;

for (int i=0;i<something; i++)
word2[i]=word1[i];

но я не могу понять это правильно, любая помощь?

0

Решение

Причина в том, что вы не выделили никакой памяти для word2 но когда вы пытались сделать:

word2[i] = word1[i];

в петле.

Не понятно, что вы пытаетесь сделать. Однако, учитывая word1, вы можете преобразовать его в const char * с c_str() функция-член от std::string библиотека.

3

Другие решения

Вот код, который будет работать в вашем случае:

// Define the string
string word1;

// Read a line until '\n' to the word1
std::getline(cin, word1);

// Define a char array and allocate memory it
char * word2 = new char[word1.size() + 1];

// Null-terminate the array (in case if you need to print it)
word2[word1.size()] = 0;

// Place the letters to the new array
memcpy(word2, word1.c_str(), word1.size());

Источник: Как мне преобразовать строку в массив символов? — Форум C ++

Или, если вы предпочитаете делать это по-своему:

// Define the string
string word1;

// Read a line until '\n' to the word1
std::getline(cin, word1);

// Define a char array and allocate memory it
char * word2  = new char[word1.size() + 1];

// Get the word word1 length
int wordLength = word1.size();

// Convert one string to another symbol-by-symbol
for (int i = 0; i < wordLength; i ++)
word2[i] = word1.c_str()[i];

// Null-terminate the array (in case if you need to print it)
word2[wordLength] = 0;

Примечание: не забудьте #include <string.h> для memcpy(), который используется для сохранения исходной строки от изменений.

UPD: код обновляется чтением пользовательского ввода в строку.

3

Похожие вопросы
Добавить ответ
Для оформления сообщений Вы можете использовать следующие тэги:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Нажимая кнопку «Отправить», я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности этого сайта.