main(void){
const char* str = "Hello, world!";
*(char*) str = 'H';
for(; *str; str++ ) putchar (*str);
return 0;
}
но в C89+ отрабатывает, просто не изменяя str. Почему?
ибо UB
а точно не изменяя, ты H на H меняешь
> Этот код по стандарту ANSI C падает с сегфолтом: В стандарте нет никаких сегфолтов и падений
тестировал на других литералах, не меняет
Потому что в стандарте ANSI C нет сегфолта, а только неопределённое (вообще, никем и никак) поведение, проявлением которого по счастливой случайности и стал сегфолт?
Спорим, ты неправ, никакого сегфолта тут не будет?
Кстати, а как ты видишь, что оно поменялось, если ты ровно тот же символ туда записываешь?
Педивикия сказала, что будет
Ну, это ж надпись на заборе...
Ты присваиваешь тот же символ, что там есть. Через UB. Зачем это делать? Надо ДРУГОЙ символ. А если тот же — компилятор это может выбросить запросто. UB же...
Обсуждают сегодня