Выступающий 1: Давайте напишем программу, которая получает строку от пользователя без используя CS50 библиотеки функционировать GetString. Чтобы сделать это, мы будем идти вперед и использовать зсапЕ, функция, что GetString Функция фактически использует под капотом. Но я собираюсь сделать это намеренно в багги образом. Я собираюсь сделать таким образом, что я думаю, было бы правильно, но оказывается, что мое предположение собирается быть совсем, совсем ошибочным. И в самом деле, довольно опасно. Потому что ошибки, подобные той, я собираюсь сделать может быть использована противниками таким образом, чтобы ваша машина или ваша программа могут быть взяты на потенциально. Давайте начнем в следующем. Прежде всего, давайте объявить нашу строку, иначе известный теперь как сЬаг звезды, и вызвать его с. Давайте следующий запрашивать у пользователя строку, как с "строки пожалуйста." И давайте теперь получить строку от пользователя используя зсапЕ, цитирую конец цитаты, "% ы". В Другими словами, давайте информировать зсапЕ этого мы у на самом деле ожидать, чтобы получить строку от пользователя. Но теперь мы должны сказать зсапЕ еще одна вещь - где поставить строку, пользователь предоставляет. Ну, я собираюсь просто-напросто начать с запятой с, уточнив, что я хотел бы зсапЕ поместите строку там. Я рядом собираюсь распечатать что-то как Е "спасибо за% с косая черта п запятая. "И, как всегда, я собирается пройти в строке, с. Теперь давайте сохранить, скомпилировать и запустить этот Программа, и посмотреть, если мы не можем вызвать проблема, которую я предсказал. Сделать SCANF-1. ./scanf-1. Строка пожалуйста. Давайте предоставить что-то вроде, "привет". "Спасибо за нуль". Хм, это не что я ожидал. Так что же здесь происходит? Ну, оказывается, потому, что мы объявили с как сЬаг звезды, но мы не сделали на самом деле хранится в ы адрес фактическая часть памяти, зсапЕ не сделал негде поставить строку что пользователь ввел дюйма Действительно, если пользователь в настоящее время ввести гораздо дольше, чем строка "привет", например несколько строк текста или несколько абзацев текста, это довольно Возможно, что мы могли бы вызвать так называемая сегментация вина. Потому зсапЕ не будет знать, что Я фактически не положить адрес внутри с. Скорее, это будет увидеть некоторое значение в с, некоторые картины из битов, которые могут очень хорошо иметь значение мусора, там просто случайно. И зсапЕ по-прежнему будет пытаться писать пользователь строка по этому адресу, даже если это значение мусор, который действительно может вызвать аварию. Так как мы собираемся это исправить?