gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 07:23:09 31 4
gpt4 key购买 nike

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/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com