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

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的概念是storage。对象的存储决定其生存期,因为C不是垃圾回收的。如果要创建新字符串,必须为其保留存储空间最简单的方法是自动存储,但这与它声明的函数的范围相关联,因此函数返回后自动变量停止存在。或者,可以使用静态存储,但不能是可变大小的,对函数的多个调用将使用同一个存储。最后,您可以使用分配的存储,这需要malloc()/calloc()/realloc()/free()
见C11标准草案,章节6.2.4 Storage durations of objects

09-29 21:16