答案 0 :(得分:2)
如果您可以修改C代码,则可以允许它进行回调,以便将文本发送到回调函数,而不是仅使用printf进行打印。例如,您可以使用以下内容:
void someFunctionInC
(
/* other parameters ... */
void (*printcallback)(const char* text, void* extra_arg),
void* extra_arg
)
{
/* ... */
printcallback("Hello world\n",extra_arg); /* instead of using printf */
/* ... */
}
然后,您可以在C ++中创建一个回调,将void * extra_arg参数强制转换回类,并使用给定的文本调用该类的方法。另一种可能性是你可以使用snprintf并创建一个C函数的变体,它将打印到一个字符串而不是打印到标准输出。请注意,这些解决方案都要求您能够修改给定的C函数。如果绝对不可能修改C函数,可以使用close,pipe,dup2等将stdout重定向到管道,然后从管道读回结果,但这是一个非常非常难看的解决方案。祝你好运。
答案 1 :(得分:1)
答案 2 :(得分:1)
连接C ++和C函数涉及解决在C ++中默认发生的名称修改以支持函数重载。
要从C函数调用C ++函数,必须使用 extern“C”限定符声明C ++函数。这指示编译器保持其名称不受限制。
要从C ++函数调用C函数,必须使用C ++函数范围内的 extern“C”对其进行原型设计。
答案 3 :(得分:0)
这有点旧,但请看一下here。似乎QTextStream
就是答案,但我不确定具体细节。
答案 4 :(得分:0)
QProcess是QIODevice。如果您正在调用此C程序,您可以使用QProcess并使用QProcess :: readAll *成员从中读取它的输出