c++ - freopen_s ("conout$") 和 fclose

标签 c++ c windows freopen

Visual C++ 报告传递给 fclose 的参数无效,该参数是 freopen_s 返回的 FILE*:

#include <WinSock2.h>
#include <iostream>

int APIENTRY wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow) {
    UNREFERENCED_PARAMETER(hPrevInstance);
    UNREFERENCED_PARAMETER(nCmdShow);

#ifdef _DEBUG
    AllocConsole();
#else
    AttachConsole(ATTACH_PARENT_PROCESS);
#endif

    FILE* pCout;
    freopen_s(&pCout, "conout$", "w", stdout); //returns 0

    fclose(pCout);

#ifdef _DEBUG
    system("pause");
#endif

    FreeConsole();

    return 0;
}

我不应该尝试在程序结束时关闭 conout$ 吗?抛出异常是因为文件指针在所有控制台输出的进程之间共享吗?

最佳答案

fclose 调用失败,因为您传递的是空 FILE*FILE* 为空,因为对 freopen_s 的调用失败。该调用失败,因为该进程没有要打开的控制台。

您的程序在调试版本中工作,因为您调用 AllocConsole 为您的进程分配一个控制台。您的程序在发布版本中不起作用,因为您没有调用 AllocConsole;您调用 AttachConsole,如果父进程没有控制台,它将失败(并且无效)。

关于c++ - freopen_s ("conout$") 和 fclose,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20158478/

相关文章:

c++ - 通过 MPI 发送和接收 2D 数组

c++ - 为什么使用构造函数而不是函数?

c - 添加两个宏并在预处理阶段转换为字符串

c++ - 显示带有 GLTessellated 对象的列表? (OpenGL)

windows - 根据字符串匹配批量提取字符串(去掉匹配的字符串)

windows - Windows Shell 中的 ImageMagick 命令替换

c++ - 在 C++ 中使用 const char* 作为映射键的正确方法

c++ - 自定义 C++ Linux 应用程序中的 Google 地球

c - 访问结构数组时发生内存冲突

windows - 从 C++ 源文件创建 Windows DLL