Ошибка сканирования в Visual Studio
Обновлено: 21.11.2024
При компиляции проекта на языке C в VS 2012, если используется функция scanf, при компиляции появится следующая ошибка:
ошибка C4996: 'scanf': эта функция или переменная могут быть небезопасными. Вместо этого рассмотрите возможность использования scanf_s. Чтобы отключить устаревание, используйте _CRT_SECURE_NO_WARNINGS. Подробнее см. в интерактивной справке.
Причина в том, что Visual C++ 2012 использует более безопасные подпрограммы библиотеки времени выполнения. Чтобы узнать о новых функциях Security CRT (то есть с суффиксом "_s"), см.:
" Версия функции CRT с повышенной безопасностью "
Решение этой проблемы приведено ниже:
Метод 1. Замените исходные старые функции новыми функциями Security CRT.
Способ 2. Используйте следующие методы, чтобы заблокировать это предупреждение:
<р>1. Определите следующие макросы в предварительно скомпилированном заголовочном файле stdafx.h (примечание: это должно быть до включения любых заголовочных файлов): <р>3. Измените определение предварительной обработки:Проект -> Свойства -> Свойства конфигурации -> C/C++ -> Препроцессор -> Определение препроцессора, добавьте:
Метод 3. Метод 2 не использует более безопасную функцию CRT, что явно не стоит рекомендовать, но мы не хотим менять имена функций по одному. Вот более простой способ:
Определите следующие макросы в предварительно скомпилированном заголовочном файле stdafx.h (также перед включением любых заголовочных файлов):
При связывании старые функции будут автоматически заменены функциями Security CRT.
Примечание. Хотя в этом методе используется новая функция, он не может устранить предупреждение (причина отмечена красной буквой). Вы должны использовать второй метод (-_-) одновременно. То есть в предварительно скомпилированный заголовочный файл stdafx.h должны быть добавлены следующие два предложения:
Объяснение причины ошибки:
Такое предупреждение от Microsoft в основном связано с функциями библиотеки C. Многие функции не выполняют определение параметра (в том числе выхода за границы). Microsoft обеспокоена тем, что их использование вызовет исключения памяти, поэтому она переписывает функции с той же функцией. Функция протестирована на параметры, и пользоваться этими новыми функциями безопаснее и удобнее. Вам не нужно специально запоминать эти переписанные функции, потому что компилятор подскажет вам соответствующую безопасную функцию, когда выдаст предупреждение для каждой функции. Вы можете узнать это, проверив предупреждающее сообщение, и проверьте подробности в MSDN, когда будете его использовать.
Читает отформатированные данные из стандартного потока ввода. Доступны более безопасные версии этих функций; см. scanf_s , _scanf_s_l , wscanf_s , _wscanf_s_l .
В Visual Studio 2015 семейства функций printf и scanf были объявлены встроенными и перемещены в заголовки and. Если вы переносите старый код, вы можете увидеть LNK2019 в связи с этими функциями. Дополнительные сведения см. в разделе История изменений Visual C++ за 2003–2015 годы.
Синтаксис
Параметры
format
Формат управляющей строки.
аргумент
Необязательные аргументы.
локаль
Используемая локаль.
Возвращаемое значение
Возвращает количество успешно преобразованных и назначенных полей; возвращаемое значение не включает поля, которые были прочитаны, но не присвоены. Возвращаемое значение 0 указывает на то, что поля не были назначены.
Если format является указателем NULL, вызывается обработчик недопустимых параметров, как описано в разделе Проверка параметров. Если выполнение может быть продолжено, эти функции возвращают EOF и присваивают errno значение EINVAL .
Информацию об этих и других кодах ошибок см. в разделах _doserrno , errno , _sys_errlist и _sys_nerr .
Примечания
Функция scanf считывает данные из стандартного потока ввода stdin и записывает данные в место, заданное аргументом . Каждый аргумент должен быть указателем на переменную типа, соответствующего спецификатору типа в формате . Если копирование происходит между перекрывающимися строками, поведение не определено.
При чтении строки с помощью scanf всегда указывайте ширину для формата %s (например, "%32s" вместо "%s"); в противном случае неправильно отформатированный ввод может легко вызвать переполнение буфера. В качестве альтернативы рассмотрите возможность использования scanf_s , _scanf_s_l , wscanf_s , _wscanf_s_l или fgets .
wscanf — это расширенная версия scanf; аргумент format для wscanf представляет собой строку расширенных символов. wscanf и scanf ведут себя одинаково, если поток открыт в режиме ANSI. В настоящее время scanf не поддерживает ввод из потока UNICODE.
Версии этих функций с суффиксом _l идентичны, за исключением того, что они используют переданный параметр языкового стандарта вместо языкового стандарта текущего потока.
Обычные сопоставления текстов
<таблица>Требования
Подпрограмма | Обязательный заголовок |
---|---|
scanf , * *_scanf_l ** | |
wscanf , _wscanf_l | или |
Консоль не поддерживается в приложениях универсальной платформы Windows (UWP). Стандартные дескрипторы потоков, связанные с консолью, stdin , stdout и stderr , должны быть перенаправлены, прежде чем функции времени выполнения C смогут использовать их в приложениях UWP. Дополнительную информацию о совместимости см. в разделе Совместимость.
Потому что я только изучаю язык C , Впервые у меня возникла эта проблема , я не знаю, что происходит , А потом я изучал его в Chrome , Просто знаю почему , И нашел несколько разбросанных по каждому угол решения, Позвольте мне подвести итог здесь.
Вопрос, почему :
остайтесь ANSI C. Есть только scanf(), нет, scanf_s(), однако scanf() не проверяет границы при чтении, так что это может привести к утечке памяти. поэтому Microsoft Компания в VS Компилятор предоставляет scanf_s(). Если вы хотите продолжать использовать scanf. Эта небезопасная функция, ее можно решить следующими способами.
Метод ①:
удерживать scanf Изменить на :scanf_s
Это зависит от компилятора VS. Поскольку я считаю, что scanf() небезопасен, он определяет один из своих собственных scanf_s().
Метод ②:
Причиной ошибки компилятора является проверка VS Medium SDL. Просто найдите ее и выключите.
Закройте шаги: щелкните правой кнопкой мыши «Документы проекта» —— «атрибут» —— «Свойства конфигурации» ——«C/C++»——«процедура»——«Проверка SDL». Измените его на «нет», что сделать, как показано на рисунке
После изменения на No компилировать снова можно .
Метод ③:
// Выключаем все это
Метод ④:
// Игнорировать обнаружение безопасности
Каждый раз, когда вы добавляете эту строку кода, это кажется немного сложным???( Когда я впервые нашел этот метод, мое первое чувство было таким же )
На самом деле, это не так уж и сложно, его также можно разделить на два метода:
(1) Все, что нам нужно сделать, это добавить в VS _CRT_SECURE_NO_WARNINGS Этот макрос в порядке. Конкретная операция показана на рисунке ниже:
(2) оставайтесь VS2019 По пути установки «newc++file.cpp». Этот файл откройте. В режиме Блокнота , Скопируйте и вставьте эту строку кода , И сохраните ее , Таким образом, после каждого нового .c Эта строка кода будет автоматически появляться на первой строке при создании исходного файла .
【Будьте осторожны 】 Если во время сохранения появляется сообщение «Отказано в доступе» Ситуация, Вы можете протестировать, загрузить и установить инструмент «Блокнот++», Затем запустите программное обеспечение от имени администратора, Используйте это программное обеспечение, чтобы открыть вышеупомянутый файл «newc++file.cpp», скопируйте и вставьте код, сохраните его.
Последние два упомянутых действия выполняются за один раз, вам не нужно делать это сзади.
Лично я предпочитаю метод ④ из (1) методов. Я также рекомендую вам использовать этот метод —— Ведь это просто и это можно сказать раз и навсегда
VS2019 в scanf Проблема игнорирования возвращаемого значения и ее решение
Недавно я писал страницу, используя jquery ajax, чтобы реализовать суждение. Нет проблем, просто написание теста. Через два дня я обнаружил, что есть проблема. Без суждения. Получается, что всем предупреждениям Возвращаемому значению будет предшествовать несколько символов новой строки и пробелов. (Я до сих пор не понимаю, Тот же компьютер, То же, что и .
Если поля в классе сущностей и таблице базы данных не согласованы Измененные свойства . Чтобы перегенерировать геттер и сеттер также метод toString В тестовом классе соответствующий набор Вы будете сообщать об ошибках во всех используемых вами методах. Просто измените на последний набор Метод в порядке. .
в , Мы подробно объясним, как использовать _version для подтверждения .
Краткое введение в LVS Интернет Быстрый рост мультимедийных сетевых серверов приводит к быстрому увеличению количества доступов. Сервер должен иметь возможность предоставлять большое количество одновременных услуг доступа. Поэтому для сервера с большой нагрузкой, говорят, CPU.I/O Вычислительная мощность скоро станет узким местом. Из-за одной станции .
иногда используйте linux shell. Вам нужно посмотреть полный путь к текущему местоположению, когда вы находитесь, иметь доступ к команде pwd. Конечно, как только вы узнаете команду, вы можете пройти через man pwd, чтобы увидеть все справочные руководства для этой команды .
PL/SQL Developer Нет данных при использовании запроса условия на китайском языке. Это связано с несоответствием набора символов. Выполните следующую команду sql: выберите userenv('language') from dual; Показать :SIM .
Я изучаю Java Базовые знания , Изучая HashMap Когда дело доходит до знаний , я понимаю HashMap Проблема параллелизма , Запишите здесь , Углубите понимание (Эта статья основана на Java1.7 Of , В основном чтобы быть более интуитивно понятным, обновленная версия .
Д. Xenia и Bit Operations лимит времени на тест: 2 секунды лимит памяти на тест: 256 мегабайт ввод: .
Одна из проблем, возникающих после установки языка программирования C в Microsoft Visual Studio, иногда автоматически не отображаются числовые строки, что приходится делать вручную.
Чтобы решить эту проблему, мы напишем программу:
Где мы собираемся написать программу, в которой мы будем спрашивать чей-то возраст, спрашивая год его рождения.
После того, как вы запустите свой код, у вас появится сообщение:
"Возвращаемое значение игнорируется: "scanf""
" 'scanf': эта функция или переменная могут быть небезопасными"
Зеленая линия в коде сканирования останется неподвижной, но ваш код будет работать без проблем.
Вывод после запуска кода на этот раз
Чтобы отключить предупреждение в файле для всего последующего, используйте директиву warning.
Если хотите, можете скопировать код отсюда:
printf("Введите год своего рождения");
возраст = 2022 – год рождения;
printf(" ваш возраст = %d\n ", возраст);
Связанные
Похожие сообщения
Команда БПЛА Гокпусу
Как удалить водяной знак с фотографии xiaomi?
как определить, 32- или 64-разрядная версия вашего компьютера
Подключение Raspberry pi к pixhawk (Mav link 1 не работает)
Оставить комментарий Отменить ответ
Причины обесцвечивания волос и пути решения
Мы разъясняем проблему поседения волос, которая рассматривается как эстетическая проблема, которой многие из нас боятся… Подробнее…
5 турецких повседневных идиом
ГОРМЕЗДЕН ГЕЛЬМЕК
Лексическое значение: игнорировать
Значение идиомы: На самом деле вы осознаете, но сознательно предпочитаете притворяться, что не видите этого. Подробнее…
Как удалить водяной знак с фотографии xiaomi?
Пользовательский интерфейс Xiaomi MIUI работает поверх Android на телефонах Redmi. В сентябре 2019 года количество пользователей Redmi… Читать дальше…
Подключение Raspberry pi к pixhawk (Mav link 1 не работает)
Вот решение, как подключить Raspberry pi и pixhwak через USB (без использования кабеля DF13).
Куда пойти в Кушадасы
Приложение для восстановления файлов для Android
Возможна потеря и повреждение данных.
Нет необходимости искать специальный инструмент для восстановления фотографий или недавно удаленного видео.
Рис для кожи и рецепты рисовых масок для лица
ПРЕИМУЩЕСТВА РИСА ДЛЯ КОЖИ И РЕЦЕПТЫ РИСОВЫХ МАСОК ДЛЯ ЛИЦА Секрет красоты восточноазиатских женщин из прошлого! Как… Подробнее…
Два сайта, которые сделали мой сайт лучше, чем когда-либо
Мой первый веб-сайт Я всегда хотел иметь веб-сайт, но не знал, как это сделать, и я… Читать далее…
Рекомендации по размещению в Кушадасах
Когда мы проводим исследование о размещении, мы обычно получаем недостаточно информации. Хотя Кушадасы — небольшой курортный регион, здесь есть много вариантов… Читать дальше…
Топ-5 криптовалют с большим объемом и низким предложением
Для лучшего хостинга веб-сайта
Авторское право © 2022 | Бенсрайтинг
Обзор конфиденциальности
Читайте также: