【问题标题】:WriteFile to stdout fails after freopenfreopen 后,WriteFile 到 stdout 失败
【发布时间】:2012-04-23 19:27:27
【问题描述】:

我写了以下代码:

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

【问题讨论】:

  • 但是您使用的是freopen?您检查它是无效句柄还是 null,然后继续写入文件。在这种情况下,它似乎是空的。在WriteFile 之前,您可能需要一个最终的else 案例。仅供参考,我建议在 C++ 中使用 std::fstream
  • @AJG85 - //错误命令返回错误描述符,所以它无法到达WriteFile.但是(为了您的方便)我已经为您更改了代码。并且仍然发生错误

标签: c++ windows writefile freopen


【解决方案1】:

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

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

在您的情况下,您可能想要使用 lpNumberOfBytesWritten。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 2011-09-09
    • 1970-01-01
    • 2012-01-23
    • 1970-01-01
    相关资源
    最近更新 更多