重新打开后,将文件写入标准输出失败

WriteFile to stdout fails after freopen

本文关键字:标准输出 失败 文件 新打开      更新时间:2023-10-16

我写了以下代码:

int fd = _dup(fileno(stdout));
FILE* tmp = freopen("tmp","w+",stdout);
HANDLE out = GetStdHandle(STD_OUTPUT_HANDLE);
if (out == INVALID_HANDLE_VALUE){
      //error
}
else if (out == NULL) {
      //error
}
else {
   WriteFile(out, "num", sizeof("num"), NULL, NULL);
 }

在最后一行我得到一个断言" Unhandled exception...:Access violation writing location 0x000000 "可能是什么问题及其解决方法?

谢谢。

P.S:由于项目的限制,我无法使用freopen。

WriteFile 的最后两个参数中只有一个可以为 NULL,另一个必须是有效的指针。

http://msdn.microsoft.com/en-us/library/windows/desktop/aa365747.aspx

在您的情况下,您可能希望使用 lpNumberOfBytesWrite。

DWORD written;
WriteFile(out, "num", sizeof("num"), &written, NULL);