Visual C ++ 2017 - 控制台应用程序
我找到的Windows版popen的唯一文档,即_popen,表示它应该在失败时返回null_ptr。它没有提到向控制台发送无偿错误消息。然而,如果返回非空并且喷出。我还没有找到一种方法来确定管道是否连接。当我使用fprintf写入坏管道时,它似乎也没有失败。这是_popen中的错误,还是我做错了?解决方法是什么?
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
int main()
{
// This program is expected to write
// 00000000
// Good
//
// Instead it writes (e.g.), in this order,
// 0082F2C0
// Not good
// '42' is not recognized as an interal or external command,
// operable program or batch file.
FILE* fp = _popen("42 is a no-good command", "w");
std::cout << fp << std::endl;
if (!fp) {
std::cout << "Good" << std::endl;
}
else {
std::cout << "Not good" << std::endl;
}
return 0;
}
答案 0 :(得分:1)
您对_popen
()的调用成功,因为它正在命令处理器的衍生副本(命令提示符,通常为cmd.exe
)的上下文中执行您传递的任何命令。
(请参阅备注部分:_popen, _wpopen)。
您只需打开命令提示符并输入"42 is a no-good command"
即可证明/重新创建此内容。
您应该得到程序产生的完全相同的错误。