Массив указателей, изменение элементов указателя - PullRequest
1 голос
/ 28 апреля 2020

Если я объявлю массив указателей следующим образом:

    char* arr[5] = {"Mercury",
    "Mercury",
    "Venus",
    "Earth",
    "EArth"};

Могу ли я затем изменить поет в этих указателях? Я пытался сделать что-то подобное

*(*(arr + 1) + 1) = 'i';

, но это не работает, я получаю дамп памяти. Есть ли способ сделать это, или я должен объявить это по-другому?

1 Ответ

1 голос
/ 28 апреля 2020

Есть ли способ сделать это, или я должен объявить это по-другому?

char* arr[5] = {"Mercury", "Mars", "Venus", "Earth", "Pluto"};

arr - это массив из 5 char указателей на строковые литералы. Любая попытка изменить строковый литерал вызывает неопределенное поведение, поэтому вы не можете их изменять.

Если вы хотите изменить содержимое, вам нужно fe, чтобы определить их как двумерный массив char s:

char arr[5][10] = {{"Mercury"}, {"Mars"}, {"Venus"}, {"Earth"}, {"Pluto"}};

и использовать

strcpy(arr[0], "Uranus");

size_t len = strlen(arr[0]);  
for(size_t i = 9; i > (len + 1); i--)  // To remove all left characters from prev. string.
{
    a[0][i] = '\0';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...