Стандарт явно перечисляет это как неопределенное поведение в §J.2:
- Программа пытается изменить
строковый литерал (6.4.5)
Если вы хотите скопировать его в локальный массив, выполните:
char a[] = "abc";
a
- это массив в стеке, и вы можете свободно его изменять.