Вы не можете сделать это с помощью sprintf (), но вы можете быть в состоянии с помощью snprintf (), в зависимости от вашей платформы.
Вам нужно знать, сколько символов вы заменяете (но, помещая их в середину строки, вы, вероятно, знаете это в любом случае).
Это работает, потому что некоторые реализации snprintf () НЕ гарантируют, что пишется завершающий символ - предположительно для совместимости с функциями, такими как stncpy ().
char message[32] = "Hello 123, it's good to see you.";
snprintf(&message[6],3,"Joe");
После этого «123» заменяется на «Джо».
В реализациях, где snprintf () гарантирует нулевое завершение, даже если строка обрезана, это не будет работать. Поэтому, если переносимость кода вызывает беспокойство, вам следует избегать этого.
Большинство Windows-версий snprintf () демонстрируют это поведение.
Но MacOS и BSD (и, возможно, linux), по-видимому, всегда заканчиваются нулем.