C ++:执行命令并返回输出会导致断言失败

时间:2018-01-23 16:10:02

标签: android c++ assertions

我正在开发一个项目,要求我使用adb install以编程方式安装Android .apk。我还需要获取结果输出以便稍后使用。我有以下泛型函数来执行命令并将输出作为字符串返回:

std::string exec(const char* command) {
    std::string output = "";
    const int bufferSize = 100;

    FILE *pipe;
    char buffer[bufferSize];

    pipe = _popen(command, "r");
    if (pipe == NULL) {
        exit(1);
    }
    while (fgets(buffer, bufferSize, pipe) != NULL) {
        output += buffer;
    }
    _pclose(pipe);

    return output;
}

当命令执行并正确返回输出时,使用此函数执行adb install时出现以下错误:

  

Debug Assertion失败!

     

程序:...(我的.exe)文件:   minkernel \ crts \ ucrt \ src \ appcrt \ lowio \ read.cpp行:258

     

表达式:static_cast(source_buffer)==   的static_cast(result_buffer)

我在网上搜索了这个错误并且没有任何结果。以下是导致断言失败的行:

while (fgets(buffer, bufferSize, pipe) != NULL) {

谁能告诉我这里发生了什么,我可以解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

或许以下内容相关(来自微软文档)

  

如果在Windows程序中使用,_popen函数将返回无效   导致程序无限期停止响应的文件指针。   _popen在控制台应用程序中正常工作。要创建重定向输入和输出的Windows应用程序,请参阅创建子项   在Windows SDK中使用重定向输入和输出进行处理。

尝试以下https://msdn.microsoft.com/library/windows/desktop/ms682499

答案 1 :(得分:0)

遇到同样的问题,并通过设置模式将其固定为二进制(添加'b'):

_popen(xxx, "rb");