freopen美国(“conout$”)和fclose VisualC++显示,一个无效的参数传递给了 fCuts,该参数是FrOpenOS: 返回的代码>文件*/Cu> #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; } #包括 #包括 int APICENTRY wWinMain(HINSTANCE HINSTANCE、HINSTANCE hPrevInstance、LPWSTR lpCmdLine、int nCmdShow){ 未引用的_参数(HPPreInstance); 未引用的_参数(nCmdShow); #ifdef_调试 allocsole(); #否则 附加控制台(附加父进程); #恩迪夫 文件*pCout; freopen_s(&pCout,“conout$”,“w”,stdout);//返回0 fclose(pCout); #ifdef_调试 系统(“暂停”); #恩迪夫 FreeConsole(); 返回0; }

freopen美国(“conout$”)和fclose VisualC++显示,一个无效的参数传递给了 fCuts,该参数是FrOpenOS: 返回的代码>文件*/Cu> #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; } #包括 #包括 int APICENTRY wWinMain(HINSTANCE HINSTANCE、HINSTANCE hPrevInstance、LPWSTR lpCmdLine、int nCmdShow){ 未引用的_参数(HPPreInstance); 未引用的_参数(nCmdShow); #ifdef_调试 allocsole(); #否则 附加控制台(附加父进程); #恩迪夫 文件*pCout; freopen_s(&pCout,“conout$”,“w”,stdout);//返回0 fclose(pCout); #ifdef_调试 系统(“暂停”); #恩迪夫 FreeConsole(); 返回0; },c++,c,windows,freopen,C++,C,Windows,Freopen,我是否应该在课程结束时关闭conout$?由于文件指针在所有控制台输出的进程之间共享,是否引发异常?对fclose的调用失败,因为您正在传递一个空的文件*。文件*为空,因为调用freopen\s失败。该调用失败,因为进程没有要打开的控制台 您的程序在调试版本中工作,因为您调用alloconsole为流程分配控制台。您的程序在发布版本中不工作,因为您没有调用alloconsole;调用AttachConsole,如果父进程没有控制台,则会失败(并且没有任何效果)。调用fclose失败,因为您正在传

我是否应该在课程结束时关闭conout$?由于文件指针在所有控制台输出的进程之间共享,是否引发异常?

fclose
的调用失败,因为您正在传递一个空的
文件*
文件*
为空,因为调用
freopen\s
失败。该调用失败,因为进程没有要打开的控制台


您的程序在调试版本中工作,因为您调用
alloconsole
为流程分配控制台。您的程序在发布版本中不工作,因为您没有调用
alloconsole
;调用
AttachConsole
,如果父进程没有控制台,则会失败(并且没有任何效果)。

调用
fclose
失败,因为您正在传递一个空的
文件*
文件*
为空,因为调用
freopen\s
失败。该调用失败,因为进程没有要打开的控制台


您的程序在调试版本中工作,因为您调用
alloconsole
为流程分配控制台。您的程序在发布版本中不工作,因为您没有调用
alloconsole
;你调用< C++ > AutoTung,如果父进程没有控制台,它将失败(并且没有效果)。请提供一份完整的报告,说明问题所在。对
freopen\s
的调用返回什么?(如果要调用
\s
-变量,需要检查返回的状态。)返回的errno\t为0,这意味着没有错误,对吗?顺便说一句,这只发生在发布模式下,即使函数在两种情况下都返回0。鉴于@JamesMcNellis reports的结果,你需要发布工作代码来演示这个问题。@ JAMESMCNELIS我在FRUPENIOS和FHORD之间注释了所有代码,没有区别,所以只是那些导致问题的函数。没有Visual C++ 2013的RePro。请提供一份完整的报告,说明问题所在。对
freopen\s
的调用返回什么?(如果要调用
\s
-变量,需要检查返回的状态。)返回的errno\t为0,这意味着没有错误,对吗?顺便说一句,这只发生在发布模式下,即使函数在两种情况下都返回0。鉴于@JamesMcNellis reports的结果,您需要发布工作代码来演示问题。@JamesMcNellis我注释掉了freopen_s和fclose之间的所有代码,没有区别,所以问题的原因就是这些函数。+1用于将所有注释和我的答案很好地总结成一个连贯的答案。我犯了一个错误,把评论变成了回答。好吧,哎呀。这从一开始就应该很明显,但我检查了命令提示符的输出,Alloconsole和freopen_没有失败,并且在没有控制台的情况下从VS进行调试,Alloconsole和freopen_失败。尽管如此,调试器仍然将freopen_s的返回值报告为0,因此它可能只是不准确。+1很好地将所有注释和我的答案汇总为一个连贯的答案。我犯了一个错误,把评论变成了回答。好吧,哎呀。这从一开始就应该很明显,但我检查了命令提示符的输出,Alloconsole和freopen_没有失败,并且在没有控制台的情况下从VS进行调试,Alloconsole和freopen_失败。尽管如此,调试器仍然将freopen_s的返回值报告为0,因此可能只是不准确。