Когда вы пытаетесь изменить строковый литерал, вы можете получить ошибку.
Что действительно происходит, так это то, что поведение вашего кода не определено.Если вам повезет, вы получите ошибку.Если вам не повезло, код будет работать должным образом, что затрудняет поиск ошибки.
Кстати, вы можете объявить массив char, размер которого будет получен из строкового литерала, использованного для его инициализации:
char var1[] = "XALOMR"; /* sizeof var1 == 7 */