В чем причины остановки работы программы?
Вот две вырезки из программ
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";
создает изменяемый массив, который заполняется указанными инициализирующими символами. Изменение разрешено, массив не константный.