Попытка изменить строковый литерал вызывает неопределенное поведение:
char * p = "wikipedia";
p[0] = 'W'; // undefined behaviour
Один из способов предотвратить это - определить его как массив вместо указателя:
char p[] = "wikipedia";
p[0] = 'W'; // ok
Почему char *
вызывает неопределенное поведение, а char []
- нет?