首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >freopen_s("conout$")和fclose

freopen_s("conout$")和fclose
EN

Stack Overflow用户
提问于 2013-11-23 04:17:45
回答 1查看 8.9K关注 0票数 0

Visual C++正在报告向fclose传递了无效参数,该参数是freopen_s返回的FILE*

代码语言:javascript
复制
#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$?是否因为文件指针在所有控制台输出的进程之间共享而引发异常?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-23 06:20:31

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

程序在调试生成中工作,因为您调用AllocConsole为进程分配控制台。您的程序在发布版本中无法工作,因为您没有调用AllocConsole;您调用了AttachConsole,如果父进程没有控制台,这将失败(并且没有任何效果)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20158478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档