_perror returns 给出错误命令时为非 NULL

_perror returns non-NULL when given bad command

Visual C++ 2017 -- 控制台应用程序

我找到的关于 Windows 版本 popen 的唯一文档,即 _popen,说它在失败时应该 return 和 null_ptr。它没有提到向控制台发出无端错误消息。然而,如果 returns 非空并且喷出。我还没有找到确定管道是否已连接的方法。当我使用 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;
}

您对 _popen() 的调用成功,因为它正在执行您在命令处理器的生成副本(命令提示符,通常是 cmd.exe)的上下文中传递给它的任何命令。

(请参阅此处的 备注 部分:_popen, _wpopen)。

您可以 prove/recreate 只需打开命令提示符并输入 "42 is a no-good command"

您应该得到与您的程序产生的完全相同的错误。