窗口 – 为什么WriteFile在写入标准输出时崩溃?
发布时间:2020-12-14 04:33:49 所属栏目:Windows 来源:网络整理
导读:这是一个使用WinAPI的WriteFile(在Microsoft Visual C 2008 Express中编译)的“Hello world”程序: int _tmain(int argc,_TCHAR* argv[]){ wchar_t str[] = L"Hello world"; HANDLE out = GetStdHandle(STD_OUTPUT_HANDLE); if(out out!=INVALID_HANDLE_VAL
这是一个使用WinAPI的WriteFile(在Microsoft Visual C 2008 Express中编译)的“Hello world”程序:
int _tmain(int argc,_TCHAR* argv[]) { wchar_t str[] = L"Hello world"; HANDLE out = GetStdHandle(STD_OUTPUT_HANDLE); if(out && out!=INVALID_HANDLE_VALUE) { WriteFile(out,str,sizeof(str),NULL,NULL); CloseHandle(out); } return 0; } 如果在控制台窗口中执行,它会高兴地打招呼世界.如果您尝试重定向其标准输出,但是,如 hello.exe > output.txt 程序在WriteFile(NULL指针异常)中崩溃.尽管如此,output.txt仍然存在,并且包含正确的输出. 崩溃时的调用堆栈: KernelBase.dll!_WriteFile@20() + 0x75 bytes kernel32.dll!_WriteFileImplementation@20() + 0x4e bytes srgprc2.exe!wmain(int argc=1,wchar_t * * argv=0x00483d88) Line 15 + 0x16 bytes C++ 消息:“srgprc2.exe中0x75ce85ea(KernelBase.dll)中的未处理异常:0xC0000005:访问冲突写入位置0x00000000”. 这里发生了什么?谢谢!
WriteFile
is not optional的第四个参数.你传递NULL,这是不允许的.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Win2003批处理单独运行可以,加入任务计划无法运行
- 我在哪里可以获得Windows检查版本?
- windows-server-2008 – 如何使用一个公共IP地址的多个虚拟
- windows-server-2008 – Windows Server 2008:当NIC有多个
- mingw – 如何使用msys在Windows上静态链接iconv?
- windows-server-2012 – 如何在Windows Server 2012中更改颜
- Windows命令提示符中的文本颜色更改
- windows-8 – 是否可以在Windows RT上编程
- 用键盘上的按钮显示UIView,比如Skype,Viber messengers(Swi
- .net – 带有验证和取消按钮的消息框