C 中的字符串连接

标签 c string

我有一个连接两个 C 字符串的方法。该方法返回一个新的。效果很好。有没有办法让这个方法无效,只修改第一个方法?

编辑:我无法使用 strcopy 或 string.h 库中的任何其他函数。还应该由调用者来确保 s1 有足够的空间来容纳 s2。

char *str_glue(char *s1, char *s2) 
{
char *r; //return string
int len1, len2;
int i, j;

len1 = str_length(s1);
len2 = str_length(s2);

if ((r=(char*)malloc(len1 + len2 + 1))==NULL)
{
    return NULL;
}

for (i=0, j=0; i<len1; i++, j++) {
    r[j] = s1[i];
}
for (i=0; i<len2; i++, j++)
{
    r[j] = s2[i];
}

r[j] = '\0';

return r;

}


int main() {

char* x = "lightning";
char* y = "bug";
char *z = str_glue(x, y);
printf("%s\n", z);
}

最佳答案

不是真的。 *s1 是一个已经具有固定长度的 char[]。如果您写入的长度超过了该长度,您将占用 *s1 之外的内存。您必须创建一个长度为 *s1 + *s2 的新字符串,以避免出现此问题,就像您已经做过的那样。

编辑:我想如果 *s1 足够大以容纳其自身和 *s2,您可以编写一个函数来执行您想要的操作。但除此之外,没有。

关于C 中的字符串连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15823933/

相关文章:

c# - 如何在两个字符串中找到共同的后缀?

JavaScript 关联数组变量

Javascript:搜索数组以查看它是否包含字符串的一部分

javascript - jQuery 替换字符串中的 HTML

ruby - 将字符串转换为 Ruby 中的条件

c - strtok() 的输出不同

c - 为什么数组中的旧值仍然存在?

c - 存储指针值供以后使用

c - 什么时候默认使用 C 中的 main 函数

c - 指向 3D 数组数据切片的 2D 指针数组