我正在开发一个项目,要求我使用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) {
谁能告诉我这里发生了什么,我可以解决这个问题吗?
答案 0 :(得分:0)
或许以下内容相关(来自微软文档)
如果在Windows程序中使用,_popen函数将返回无效 导致程序无限期停止响应的文件指针。 _popen在控制台应用程序中正常工作。要创建重定向输入和输出的Windows应用程序,请参阅创建子项 在Windows SDK中使用重定向输入和输出进行处理。
尝试以下https://msdn.microsoft.com/library/windows/desktop/ms682499
答案 1 :(得分:0)
遇到同样的问题,并通过设置模式将其固定为二进制(添加'b'):
_popen(xxx, "rb");