Ошибка сканирования в 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 идентичны, за исключением того, что они используют переданный параметр языкового стандарта вместо языкового стандарта текущего потока.

Обычные сопоставления текстов

<таблица> TCHAR.Подпрограмма H _UNICODE и _MBCS не определены _MBCS определены _UNICODE определены _tscanf scanf scanf wscanf _tscanf_l _scanf_l _scanf_l _wscanf_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 | Бенсрайтинг

Обзор конфиденциальности

Читайте также: