Intereting Posts
Чтение и запись 64 бит на 64 бит в C Библиотеки ссылок, составленные различными компиляторами C: Неразрешенный внешний символ (имя функции), найденный в опции функции. Ошибка LINK 2019 OpenSSL SHA1 не проверяет тестовый вектор NIST SHAKE? компилировать ошибку «несовместимых типов при назначении типа char из типа int Недопустимое применение sizeof к неполному типу со структурой Что может привести к сбою закрытия (2) с помощью EIO для файла только для чтения? ноль больше или равен нулю, оценивается как false MPI_Gatherv: создавать и собирать массивы с переменным размером (MPI + C) Почему размер этого союза равен 2 с битовыми полями? printf печать «D» после getchar () call Какие функции из стандартной библиотеки следует (следует) избегать? const char ** a = {“string1”, “string2”} и указательный арифметический простая программа c продолжает сбой Интервальные семафоры иногда не работают должным образом

Когда мы можем или не можем модифицировать String Literals

#include int main () { char *s="FIGHT" ; printf("\n Whole string is %s ", s ); // Printing FIGHT -- this is fine s[0]='L' ; printf ("\n Now whole string is %s", s ); // Printing LIGHT -- My Question is how string literal constant is getting modified when it is being stored in read only memory . } 

Выше код работает нормально в моей системе.

TL; DR – Никогда.

Любая попытка изменить строковый литерал вызывает неопределенное поведение .

Чтобы процитировать стандарт C11 , глава §6.4.5, строковые литералы

[…]. Если программа пытается изменить такой массив, поведение не определено.

§ «Над кодом работает отлично в моей системе» .

Да, добро пожаловать в мир неопределенного поведения, который включает в себя работу (ошибочно) .