_set_invalid_parameter_handler

当CRT检测到无效参数时,将调用函数。

_invalid_parameter_handler _set_invalid_parameter_handler(
   _invalid_parameter_handler pNew
);

参数

  • [in] pNew
    对新的参数无效处理程序函数的指针。

返回值

为无效参数处理程序的指针调用之前。

备注

大多数 C 运行时函数检查参数有效性传递给它们。 如果传递的参数无效,函数会将 errno 错误号或返回错误代码。 在这种情况下,的参数无效处理程序调用。 此函数使该处理程序设置为另一个函数。 只有一个函数。一次指定为的参数无效处理程序。

当框架调用无效参数函数时,通常表示一个即出现错误。 它会中止的无效参数函数应保存所有数据。 不应到控件返回主函数,除非您确保错误可向后移动的。

无效参数函数处理程序必须具有以下原型:

void _invalid_parameter(
   const wchar_t * expression,
   const wchar_t * function, 
   const wchar_t * file, 
   unsigned int line,
   uintptr_t pReserved
);

第一个参数是参数的表达式。 第二个参数是接收的参数无效。CRT 函数的名称。 第三个参数是 CRT 中源的文件名。 第四个参数是在该文件中。 最后一个参数是保留的。 除非使用的是,参数都具有值 NULL CRT 库的调试版本。

要求

例程

必需的标头

_set_invalid_parameter_handler

<stdlib.h>

有关更多兼容性信息,请参见简介中的兼容性

示例

在下面的示例中,一个无效参数错误处理程序用来打印接收无效参数和CRT 源的文件和线。 当使用时调试 CRT 库,无效参数错误还引发断言,可以使用 _CrtSetReportMode,如下例中禁用。

// crt_set_invalid_parameter_handler.c
// compile with: /Zi /MTd
#include <stdio.h>
#include <stdlib.h>
#include <crtdbg.h>  // For _CrtSetReportMode

void myInvalidParameterHandler(const wchar_t* expression,
   const wchar_t* function, 
   const wchar_t* file, 
   unsigned int line, 
   uintptr_t pReserved)
{
   wprintf(L"Invalid parameter detected in function %s."
            L" File: %s Line: %d\n", function, file, line);
   wprintf(L"Expression: %s\n", expression);
   abort();
}


int main( )
{
   char* formatString;

   _invalid_parameter_handler oldHandler, newHandler;
   newHandler = myInvalidParameterHandler;
   oldHandler = _set_invalid_parameter_handler(newHandler);

   // Disable the message box for assertions.
   _CrtSetReportMode(_CRT_ASSERT, 0);

   // Call printf_s with invalid parameters.

   formatString = NULL;
   printf(formatString);
}
       

请参见

参考

CRT 函数的安全增强版本

errno、_doserrno、_sys_errlist 和 _sys_nerr