Вам нужно написать одну вспомогательную функцию, которая, учитывая целое число n
, число цифр d
и буфер, который является «достаточно большим» (по крайней мере, n + 1 байт), выполняет работуформатирования "% 04d" и т. д. Эта функция может использовать strcat()
, но, вероятно, не будет.
Вам нужна основная функция, которая может шагать по строке формата, изолируя разные биты (в основном, есть% -последовательности и другие символы) и их обработка соответствующим образом.Это может использовать strcat()
, но, вероятно, не будет, если у вас нет двух используемых буферов - один для хранения временных результатов от первой (вспомогательной) функции и один для конечного результата.(Я не вижу необходимости использовать два буфера, но это послужило бы оправданием для использования strcat()
.)
Убедитесь, что основной функции сообщается, насколько велик размер буфера и что он делаетне переполняет границы своего буфера.Использовать strcat()
(или strncat()
) всегда безопасно, только если вы точно знаете, сколько данных находится в буфере, в который вы копируете, сколько данных в строке, которую вы добавляете, и точно, какой длины буфера вы используете.Используем это вообще.И, в частности, интерфейс к strncat()
вызывает катастрофу - последний аргумент (размер) не является размером целевого буфера (как это происходит в большинстве аналогичных вызовов);это количество свободного места в буфере.