gpt4 book ai didi

在函数中使用 memmove() 连接字符串

转载 作者:太空宇宙 更新时间:2023-11-04 00:48:33 28 4
gpt4 key购买 nike

我想使用返回结果字符串的函数连接两个字符串。它会是这样的:

char *String_Concat (char *String_1, char *String_2)
{
char *StringResult;

//memmove String_1 to StringResult
//memmove String_2 to StringResult

return StringResult;
}

我想知道这是否是一个很好的方法,因为我对内存管理知之甚少。 StringResult 没有定义长度,我不确定两次 memmove 操作后会发生什么。

我想 StringResult 会被函数本身清除,因为我没有使用 malloc(),对吗?

最佳答案

char *String_Concat (char *String_1, char *String_2)
{
size_t len1 = strlen(String_1);
size_t len2 = strlen(String_2);
char *StringResult = malloc(len1+len2+1);
//might want to check for malloc-error...
memcpy(StringResult, String_1, len1);
memcpy(&StringResult[len1], String_2, len2+1);
return StringResult;
}

所以,C 有对象的存储 的概念。对象的存储决定了它的生命周期,因为 C 不是垃圾收集器。如果你想创建一个新的字符串,你必须为它保留存储空间。最简单的方法是自动存储,但这与声明它的函数的范围相关联,因此自动变量在函数返回后不复存在。或者,您可以使用 static 存储,但它的大小不能可变,并且对该函数的多次调用将使用相同的存储。最后,您可以使用已分配 存储,这需要malloc()/calloc()/realloc()/free()

请参阅 C11 标准草案,6.2.4 对象的存储持续时间

部分

关于在函数中使用 memmove() 连接字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27904999/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com