Не получается изменить массив char
Код:
char** n = new char*[2];
n[1] = "ll"; // без этого след строка работает
n[1] = "k";
n[0] = "klk";
// n[0][1]='s'; тоже ошибка
cout << n << " " << n[0] << " " << n[0][1] << endl;
Ошибка:
does not allow conversion from string literal to 'char *'
Почему вылетает такая ошибка? По факту я просто хочу переименовать элемент массива.
Ответы (3 шт):
У Вас n это указатель на указатель, следовательно, Вам надо выделить память для каждого n[i]. То есть
n[0] = new char[size];
n[1] = new char[size];
а потом можете заполнить n[i] строками
Строковые литералы в C++ всегда являются константами, поэтому надо привести const char* ко char*:
#include <iostream>
int main()
{
char** a = new char*[3];
a[0] = (char*) "abc";
a[1] = (char*) "def";
a[2] = (char*) "ghi";
for (size_t i = 0; i < 3; ++i)
{
std::cout << "a[" << i << "] = " << a[i] << "\n";
}
delete[] a;
return 0;
}
a[0] = abc
a[1] = def
a[2] = ghi
Если вы планируете просто хранить массив строковых литералов, то можно просто добавить const:
const char** n = new const char*[2];
n[1] = "ll"; // без этого след строка работает
n[1] = "k";
n[0] = "klk";
cout << n << " " << n[0] << " " << n[0][1] << endl;
Но вот изменять строковые литералы нельзя, так что
n[0][1]='s';
так ошибкой и останется. Если вы хотите хранить копии литералов с правом их изменения — надо выделять место для них и копировать.
Но я бы в этом случае рекомендовал работать со строками string, и не массивами, а векторами.
Ведь у вас же С++, как-никак...