Intereting Posts
Почему несколько EOF входят в программу? Как я могу обрабатывать IPC между C и Python? Как получить доступ к открытым открытым ключам ECDH, закрытому ключу и параметрам в структуре EVP_PKEY OpenSSL? Как зафиксировать repository git с помощью libgit2? Есть ли полезный случай с использованием оператора switch без брекетов? У «а» и «0» всегда есть положительные значения, даже если символ подписан? проблема с однополосным мостом Функция прироста серого кода Вопрос о объединении в C – хранить как один тип и читать как другой – это реализация определена? Невозможно понять различные результаты экспериментов с размерами буфера в C и C ++. Также ifstream медленнее, чем FILE? С чего начать (самостоятельно) обучение C, или я должен изучить другой язык? отправить целое число от клиента C на сервер Java Как сбрасывать PGresult для команд, отличных от SELECT Самое быстрое чтение файла в C Многопоточный udp-сервер

Почему эта программа не работает?

Что вызывает вывод «Hello», когда я включаю -O для gcc? Разве это не должно быть segfault (согласно этой вики )?

% cat segv.c #include  int main() { char * s = "Hello"; s[0] = 'Y'; puts(s); return 0; } % gcc segv.c && ./a.out zsh: segmentation fault ./a.out % gcc -O segv.c && ./a.out Hello 

Это неопределенное поведение (может произойти сбой, может ничего не делать и т. Д.), Чтобы изменить строковые литералы. Хорошо объяснено в FAQ C.

6.4.5 / 6

Неясно, являются ли эти массивы различными, если их элементы имеют соответствующие значения. Если программа пытается изменить такой массив, поведение не определено.