Почему char * вызывает неопределенное поведение, а char [] - нет?

Попытка изменить строковый литерал вызывает неопределенное поведение:

char * p = "wikipedia"; 
p[0] = 'W'; // undefined behaviour

Один из способов предотвратить это - определить его как массив вместо указателя:

char p[] = "wikipedia"; 
p[0] = 'W'; // ok

Почему char * вызывает неопределенное поведение, а char [] - нет?

9
задан Keith Thompson 30 November 2011 в 16:16
поделиться