Is there a way to use the C sprintf() function without it adding a '\0' character at the end of its output? I need to write formatted text in the middle of a fixed width string.
相关问题
- Multiple sockets for clients to connect to
- how to split a list into a given number of sub-lis
- What means in Dart static type and why it differs
- What is the best way to do a search in a large fil
- glDrawElements only draws half a quad
Actually this example will not add a null if you use snprintf:
You can't do this with sprintf(), but you may be able to with snprintf(), depending on your platform.
You need to know how many characters you are replacing (but as you're putting them into the middle of a string, you probably know that anyway).
This works because some implementations of snprintf() do NOT guarantee that a terminating character is written - presumably for compatibility with functions like stncpy().
After this, "123" is replaced with "Joe".
On implementations where snprintf() guarantees null termination even if the string is truncated, this won't work. So if code portability is a concern, you should avoid this.
Most Windows-based versions of snprintf() exhibit this behaviour.
But, MacOS and BSD (and maybe linux) appear to always null-terminate.