sprintf() without trailing null space in C

后端 未结 8 1295
鱼传尺愫
鱼传尺愫 2021-02-01 13:37

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 stri

8条回答
  •  离开以前
    2021-02-01 14:20

    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().

    char message[32] = "Hello 123, it's good to see you.";
    
    snprintf(&message[6],3,"Joe");
    

    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.

提交回复
热议问题