如何连接两个字符串,例如
char s[5]={'s','a','\0','c','h'};
char m[11]={'b','e','\0','c','h','b','\0','e','\0','c','h'};
有许多空字符。我试过了strcat()
。它不起作用。有什么办法吗?
答案 0 :(得分:4)
这很棘手,因为根据定义,C字符串是以空值终止的。所以你真正拥有的是两个字节缓冲区,你想要放在一起,而不是两个字符串。 (这就是为什么像strcat
这样的函数在这里不起作用的原因 - 顺便说一下 - 他们希望它们的参数是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
答案 1 :(得分:0)
所有C标准库字符串函数将在第一个\0
上停止。这是设计的。事实上,你的输入数组不可以很好地处理这些函数,因为它们不会以\0
结束。
因此,最简单的方法是使用memcpy
代替,并指定自己复制的字符数。不要忘记在目标缓冲区中分配必要的内存量。
答案 2 :(得分:0)
更直接的方式:
const int size_s = 5;
const int size_m = 11;
char s[size_s]={'s','a','\0','c','h'};
char m[size_m]={'b','e','\0','c','h','b','\0','e','\0','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','\0','c','h'};
char m[size_m]={'b','e','\0','c','h','b','\0','e','\0','c','h'};
char destination[size_s+size_m];
memcpy(destination,s,size_s);
memcpy(destination,m,size_m);
答案 3 :(得分:0)
char s[5]={'s','a','\0','c','h'};
char m[11]={'b','e','\0','c','h','b','\0','e','\0','c','h'};
char* e = (char*)malloc(sizeof(s) + sizeof(m));
memcpy(e, s, sizeof(s));
memcpy(&e[sizeof(s)], m, sizeof(m));
完成后不要忘记删除结果字符串。
free(e);