The magic character is in a known location, there's no need to iteratively scan for it.
The use of "magic" characters is not the problem, as I see it.
The use of "magic" characters is not the problem, as I see it.
BTW I'm not sure if it was clear or not but those are bits in my diagram, not bytes/characters. The "x"s are the bits of the length field, not the characters of the string.
But does that really matter when you're doing operations on the string that iterate over the whole string anyway? Since iterating the whole string is O(n) anyway, you're not really gaining anything.
You also have a fair idea of a reasonable sized buffer to move in duplication operations, avoiding single character move loops.