main()
{
char *c="abhishek";
int i;
c[2]=90;
for(i=0;i<12;i++)
{
printf("%c",c[0])
}
}
Здесь вывод - это abZishek
. Но это должно привести к ошибке шины, потому что это строковый литерал, и мы не можем изменить его значение. Почему изменяется значение c
?
В соответствии с разделом 2.14.5 пункта § 11 в C++ стандарт, он вызывает неопределенное поведение:
Эффект попытки изменить строковый литерал не определен.
Это означает, что все может случиться, и действительно что-то произошло. Вы не должны делать никаких предположений о том, что может случиться, когда вы вызываете неопределенное поведение.
"Неопределенное поведение" не гарантирует "ошибку шины" или любую другую ошибку. В общем, это не может быть легко обнаружено, поэтому ваш компилятор не обязан беспокоиться. Здесь это не беспокоит. Однако при этом вы можете вызвать непредсказуемые или странные вещи.
Вам также не хватает библиотеки и тип возврата для main
; какую C++ книгу вы используете?