如何连接具有许多空字符的两个字符串?

Abu*_*Abu 0 c concatenation memcpy

例如,如何连接两个字符串

char s[5]={'s','a','\0','c','h'};

char m[11]={'b','e','\0','c','h','b','\0','e','\0','c','h'};
Run Code Online (Sandbox Code Playgroud)

有许多空字符。我试过了strcat()。它不工作。有什么办法吗?

Cam*_*ron 5

这很棘手,因为根据定义,C 字符串是以空字符结尾的。所以你真正拥有的是你想要放在一起的两个字节缓冲区,而不是两个字符串。(strcat顺便说一下,这就是为什么像这样的函数在这里不起作用的原因——他们希望它们的参数是 C 字符串。)

由于您不能像使用 C 字符串一样使用空字符来告诉您缓冲区的结束位置,因此您需要提前知道缓冲区的大小。然后它就像将两个位块传输到单个缓冲区一样简单:

char dest[16];
memcpy(dest,     s, 5);  // Copy s to the final buffer
memcpy(dest + 5, m, 11); // Copy m to the final buffer just after s
Run Code Online (Sandbox Code Playgroud)