以下示例显示了可以处理无效指针并返回NULL的标准C 的strcpy函数的版本。
请注意,此异常处理程序旨在处理访问冲突异常,但如果发生其他类型的异常则不适用。因此,示例中的过滤器表达式使用GetExceptionCode函数在执行处理程序之前检查异常类型。这使得如果发生其他类型的异常,系统将继续搜索适当的处理程序。
还要注意,在尝试 - 除语句的尝试块中使用返回语句没有问题。这与在尝试 - 最后语句的尝试块中使用返回不同,导致尝试块异常终止。
LPTSTR SafeStrcpy(LPTSTR lpszString1,LPTSTR lpszString2){
尝试{
return strcpy(string1, string2);
}
except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ?
EXCEPTION_EXECUTE_HANDLER :
EXCEPTION_CONTINUE_SEARCH ) {
return NULL;
}
}
以下示例显示嵌套的尝试 - 最后和尝试 - 除语句的交互。RaiseException函数在尝试 - 除异常处理程序的守卫体内的尝试 - 最后终止处理程序的守卫正文中引发异常。该异常导致系统评估FilterFunction函数,该函数的返回值又会导致异常处理程序被调用。然而,在执行异常处理程序块之前,执行终止处理程序的最后块,因为控制流已经离开终止处理程序的尝试块。
DWORD FilterFunction(){
printf("1 "); //先打印
return EXCEPTION_EXECUTE_HANDLER;
}
VOID主(VOID){
尝试{
尝试{
RaiseException(1, //异常代码
0, //可持续异常
0, NULL); //没有参数
}
最后{
printf("2 ") //这是打印第二
}
}
except(FilterFunction()){
printf("3\n"); //这是最后打印的
}
}