给定错误命令时,_perror返回非NULL

时间:2017-11-10 20:11:52

标签: visual-c++ visual-studio-2017 popen windows-console

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;
}

1 个答案:

答案 0 :(得分:1)

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

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

您只需打开命令提示符并输入"42 is a no-good command"即可证明/重新创建此内容。

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