Ваше решение этой проблемы позволяет достичь нескольких вещей, но, к сожалению, есть множество других проблем, которые он не решает.
Если вы обеспокоены тем, что в выходном массиве может даже не быть допустимой строки C с завершением '\ 0', вы решили эту проблему, вставив '\ 0' методом грубой силы. Кроме того, вы выбрали оптимальное расположение, последний байт массива нельзя использовать ни для чего другого, если предполагается, что массив содержит строку с символом \ 0.
К сожалению, вы ничего не сделали, чтобы остановить вызываемую функцию, попирающую память, за пределы массива, выделенного для нее. Это вещь номер один, о которой я бы беспокоился.
Предотвращение растоптания памяти (он же переполнение буфера) - это не ракетостроение, но оно требует дисциплины и последовательности. Обычно основная идея заключается в том, чтобы никогда не просто передавать адрес какой-либо заполняемой памяти, а вместо этого всегда сопровождать этот адрес длиной доступного блока памяти. Конечно, вызываемый код должен уважать ограничение, накладываемое на него. Похоже, вы знаете об основной идее, так как упоминаете snprintf (), который является классическим примером этого подхода.