Только это надо сигнатуру функции менять. Потому что если я правильно понял твою идею, то мы передаём преалоцированный буффер как аргумент и в файле где зовём эту функцию и где можно юзать принтф выводим её после выполнения
я тут короче смотрел крутое видео по поводу монад, и там мужик заодно объяснил основной срач между языками, типа есть языки снизу вверх, типа от железа к абстракциям, а есть языки сверху вниз, от абстракций к железу и вот уже 50 лет этот срач идет