Эта функция проверяет свои параметры. Если strDest, format или timeptr является нулевым указателем, или если структура данных tm, адресованная timeptr, недопустима (например, если она содержит значения вне диапазона для времени или даты), или если строка формата содержит недопустимое форматирование код, вызывается обработчик недопустимого параметра, как описано в Проверка параметров . Если выполнение может быть продолжено, функция возвращает 0 и устанавливает для errno значение EINVAL.
Подпрограмма обработчика недопустимых параметров
Когда функция библиотеки времени выполнения C обнаруживает недопустимый параметр, она фиксирует некоторую информацию об ошибке, а затем вызывает макрос, который обертывает функцию отправки обработчика недопустимого параметра, одну из _invalid_parameter, _invalid_parameter_noinfo или _invalid_parameter_noinfo_noreturn. Вызываемая функция отправки зависит от того, является ли ваш код, соответственно, отладочной сборкой, розничной сборкой или ошибка не считается исправимой.
В отладочных сборках макрос недопустимого параметра обычно вызывает неудачное утверждение и точка останова отладчика перед вызовом функции отправки. Когда код выполняется, утверждение может быть передано пользователю в диалоговом окне, в котором есть «Прервать», «Повторить попытку» и «Продолжить» или аналогичные варианты выбора, в зависимости от операционной системы и версии библиотеки времени выполнения. Эти параметры позволяют пользователю немедленно завершить программу, подключить отладчик или позволить существующему коду продолжить работу, что вызывает функцию диспетчеризации.
Функция диспетчеризации обработчика недопустимых параметров, в свою очередь, вызывает назначенный в данный момент обработчик недопустимого параметра. По умолчанию недопустимый параметр вызывает _invoke_watson, что приводит к тому, что приложение выполняет «cra sh», то есть завершает работу и создает мини-дамп. Если это разрешено операционной системой, диалоговое окно спрашивает пользователя, хотят ли они загрузить дамп cra sh в Microsoft для анализа.
Это поведение можно изменить с помощью функций _set_invalid_parameter_handler или _set_thread_local_invalid_parameter_handler , чтобы установить обработчик недопустимого параметра для вашей собственной функции. Если указанная вами функция не завершает работу приложения, управление возвращается функции, которая получила недопустимые параметры. В CRT эти функции обычно прекращают выполнение функции, устанавливают в errno код ошибки и возвращают код ошибки. Во многих случаях значение errno и возвращаемое значение являются EINVAL, что указывает на недопустимый параметр. В некоторых случаях возвращается более конкретный код ошибки c, например EBADF для неверного указателя файла, переданного в качестве параметра. Для получения дополнительной информации об errno см. Errno, _doserrno, _sys_errlist и _sys_nerr.