В чем причины остановки работы программы?

Вот две вырезки из программ

1.

#include <stdio.h>

int main()
{
    char* sentence = "Hello, friend's";

    sentence[5] = 'a';

    printf("%s", sentence);

    return 0;
}
#include <stdio.h>

int main()
{
    char sentence[] = "Hello, friend's";

    sentence[5] = 'a';

    printf("%s", sentence);

    return 0;
}

По моему мнению, они эквивалентны, но почему при выполнении первой программы на выходе нет ничего, а выполнение второй программы идет полностью по сценарию (символ ',' заменился на 'a' и программа выводит результат - измененную строку)?

Доп. сведения: Компилятор: gcc version 11.1.0 (GCC), Язык: C, Версия языка: C99.


Ответы (1 шт):

Автор решения: Harry

Здесь

char* sentence = "Hello, friend's";

вы пытаетесь изменить литерал, который представляет собой константную строку, которая может быть размещена, например, в памяти "только для чтения". Что и приводит к неприятностям.

char sentence[] = "Hello, friend's";

создает изменяемый массив, который заполняется указанными инициализирующими символами. Изменение разрешено, массив не константный.

→ Ссылка