У вас неопределенное поведение: sprintf()
вызывает оба записи: записать пять символов (четыре символа полезной нагрузки + один завершающий нулевой байт) в массив длиной всего четыре символа. После первого вызова sprintf()
все ставки выключены.
При этом происходит то, что второй вызов sprintf()
перезаписывает завершающий нулевой символ, записанный первым sprintf()
call, и, таким образом, последний sprintf()
продолжает печатать через вторую строку, пока не найдет завершающий нулевой байт этой строки. Я понятия не имею, почему вторая строка не появляется во второй раз в выходных данных, но мне не нужно: так как у вас есть неопределенное поведение, все может произойти. В том числе появление розовых слонов ...