问题描述
可以在C中将声明为HANDLE
的变量与NULL
进行比较吗?谢谢。
版本:
例如:
HANDLE hProcess = NULL;
status = ZwOpenProcess(&hProcess,PROCESS_DUP_HANDLE,&ob,&Cid);
if (hProcess != NULL)
{
ZwClose(hProcess);
hProcess = NULL;
}
目标是检查hProcess
是否为!= 0
。然后,如果我正在检查!= NULL
,意味着同一件事吗?
解决方法
(评论太久了。)
目标是检查
hProcess
是否为!= 0
。
您可以使用if(hProcess != NULL) { /*...*/ }
进行确认,如其他答案所述。
但是,在给定的示例中,必须检查的是API调用的返回值。
HANDLE hProcess;
if(NT_SUCCESS(ZwOpenProcess(&hProcess,PROCESS_DUP_HANDLE,&ob,&Cid)))
{
/*... use hProcess ...*/
ZwClose(hProcess);
}
else
{
/*... handle error ...*/
}
,
任何指针类型都可以与NULL
进行比较。假设原始变量包含除该类型的空指针以外的任何值,结果将是虚假的(即,它将不相等)。
引用C11
,
[...]如果将空指针常量转换为指针类型,则保证生成的指针(称为空指针)与指向任何对象或函数的指针比较不相等。