There are clearer ways of organizing strings.

Some people like to assemble strings through a series string concatenation commands. This can get rather complex. Building an interesting string this way can well over a dozen lines of code. When a new person has to review the code, it can be hard to tell at a glance what the author’s intent is.
It’s a lot easier to read sprintf statements. With one simple statement, a complex string is easily assembled. Also, the sprintf statement separates the format of the message from the data.
Some people object to the use of sprintf because of outdated notions of a performance penalty from bringing in a standard I/O library. In reality, the benefits of having clear code almost always outweigh these trivial differences in performance.