The premise is wrong:
"constructing a larger string out of multiple smaller strings is a pretty common programming task"
No, it's not.
"strcat(strcat(strcat(strcpy(buf, "This "),"is "),"a long "),"string.");"
Just checked 20 years of C/C++ repositories ... not a single strcat. Actually I can't remember ever using c-strings for more than args parsing or debug logging.