如何连接两个包含多个空字符的字符串?
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);
如何连接两个字符串,例如
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);