В этой строке
*p='B';
Вы пытаетесь изменить первый байт массива символов, на который указывает указатель.Это не работает, потому что это доступная только для чтения часть двоичного файла вашей программы.Исправьте это, скопировав его в стек или кучу:
#include<stdio.h>
#include<string.h>
int main()
{
char * const p = strdup("pointerconstant"); // string is copied to the heap
printf("first=%s", p);
*p = 'B';
printf("\nsecond=%s", p);
free(p); // copy of the string on the heap is released again
return 0; // 0 indicates that the program executed without errors
}
Результат:
first = указатель-константа
second = Bointerconstant
Кстати, по моему мнению, было бы более идиоматичным написать *p = 'B';
как p[0] = 'B';
, но это, конечно, зависит от вас.
Примечание: этот ответв C вопрос также помечен как C ++