_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);
}