如何连接两个包含多个空字符的字符串?

How to concatenate two strings with many null characters?

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

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

char m[11]={'b','e','[=10=]','c','h','b','[=10=]','e','[=10=]','c','h'};

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

所有 C 标准库字符串函数将在第一个 [=10=] 处停止。这是设计使然。事实上,您的输入数组 not 不能很好地处理这些函数,因为它们不以 [=10=].

结尾

所以你最简单的做法就是改用memcpy,然后自己指定要复制的字符数。不要忘记在目标缓冲区中分配必要的内存量。

这很棘手,因为根据定义,C 字符串以 null 结尾。所以你真正拥有的是你想要放在一起的两个字节缓冲区,而不是两个字符串。 (这就是为什么像 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

更直接的方式:

const int size_s = 5;
const int size_m = 11;
char s[size_s]={'s','a','[=10=]','c','h'};
char m[size_m]={'b','e','[=10=]','c','h','b','[=10=]','e','[=10=]','c','h'};
char destination[size_s+size_m];
int i;
for (i = 0;i < size_s;i++)
    destination[i] = s[i];

for (i = 0;i < size_m;i++)
    destination[i+size_s] = m[i];

理想情况下,您应该使用 memcpy

const int size_s = 5;
const int size_m = 11;
char s[size_s]={'s','a','[=11=]','c','h'};
char m[size_m]={'b','e','[=11=]','c','h','b','[=11=]','e','[=11=]','c','h'};
char destination[size_s+size_m];

memcpy(destination,s,size_s);
memcpy(destination,m,size_m);
char s[5]={'s','a','[=10=]','c','h'};
char m[11]={'b','e','[=10=]','c','h','b','[=10=]','e','[=10=]','c','h'};
char* e = (char*)malloc(sizeof(s) + sizeof(m));

memcpy(e, s, sizeof(s));
memcpy(&e[sizeof(s)], m, sizeof(m));

完成后不要忘记删除结果字符串。

free(e);