Если вы можете изменить код 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 и т. Д., Чтобы перенаправить стандартный вывод в канал, а затем прочитать результаты из канала, но это действительно очень уродливое решение. Удачи.