2014-02-21 5 views
0
main() 
{ 
    char *c="abhishek"; 
    int i; 
    c[2]=90; 
    for(i=0;i<12;i++) 
    { 
    printf("%c",c[0]) 
    } 
} 

Здесь вывод abZishek. Но это должно привести к ошибке шины, потому что это строковый литерал, и мы не можем изменить его значение. Почему изменяется значение c?Почему значение изменяется в строковом литерале

+7

Изменение строкового литерала дает неопределенное поведение, поэтому все может случиться. –

+0

Это всего лишь кусок байтов в памяти. – OldProgrammer

+1

Это не должно даже компилироваться, строковый литерал имеет тип 'const char []' – Paranaix

ответ

7

В соответствии с разделом 2.14.5 пункта § 11 стандарта C++, он вызывает неопределенное поведение:

Эффект попытки изменить строковый литерал не определен.

Это означает, что все может случиться, и действительно что-то произошло. Вы не должны делать никаких предположений о том, что может произойти при вызове undefined behavior.

+0

Ace –

+0

Это правило также верно для c или оно применимо только в C++ – user3335653

+0

Да, в C также поведение не определено, если программа пытается изменить любые строковые литералы. – 4pie0

3

«Неопределенное поведение» не гарантирует «ошибку шины» или любую другую ошибку. В общем, это не может быть легко обнаружено, поэтому ваш компилятор не обязан беспокоиться. Здесь это не беспокоит. Однако при этом вы можете вызвать непредсказуемые или странные вещи.

Вам также не хватает библиотеки включает в себя и тип возврата для main; какую книгу на C++ вы используете?

+0

Я не включал библиотеки, потому что это очевидно. Какая необходимость включить. Я последний студент в Btech и хочу быть java-программистом, и я сертифицирован в Java. Я хочу читать c и C++ только до уровня, что я могу передать письменный тест compnies.i использую тест ваших навыков c в c для практики и возглавить первый c для теории. Что еще я должен использовать? – user3335653

+0

@ user3335653: «Не очевидно» использовать вообще то, что вы включали в себя правильные, если вы не показываете их нам. Вот рекомендация вашей книги: http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list –

Смежные вопросы