В C89 и C99 строковые литералы имеют тип char *
(по историческим причинам, насколько я понимаю). Вы правы, что пытаетесь изменить один результат в неопределенном поведении. GCC имеет специальный предупреждающий флаг, -Wwrite-strings (который не является частью -Wall
), который предупредит вас, если вы попытаетесь это сделать.
Что касается argv
, аргументы копируются в адресное пространство вашей программы и могут быть безопасно изменены в вашей функции main()
.
EDIT: Упс, если -Wno-write-strings
скопирован случайно. Обновлен с правильной (положительной) формой предупреждающего флага.