c-malloc、free和memmove在一个子函数中



我想使用一个子函数来复制一个char数组。它是这样的:

void NSV_String_Copy (char *Source, char *Destination)
{
    int len = strlen(Source);
    if (*Destination != NULL)
        free(Destination);
    Destination = malloc(len + 1);
    memmove(*Destination, Source, len);
    Destination[len] = '';             //null terminate
}

这样,我就可以从主函数调用它,并以这种方式执行操作:

char *MySource = "abcd";
char *MyDestination;
NSV_String_Copy (MySource, MyDestination);

然而,它并没有按预期工作。请帮忙!

C按值传递参数,这意味着您不能使用问题中的函数原型来更改调用方的MyDestination。以下是更新调用方的MyDestination副本的两种方法。

选项a)传递MyDestination的地址

void NSV_String_Copy (char *Source, char **Destination)
{
    int len = strlen(Source);
    if (*Destination != NULL)
        free(*Destination);
    *Destination = malloc(len + 1);
    memmove(*Destination, Source, len);
    (*Destination)[len] = '';             //null terminate
}
int main( void )
{
    char *MySource = "abcd";
    char *MyDestination = NULL;
    NSV_String_Copy(MySource, &MyDestination);
    printf("%sn", MyDestination);
}

选项b)从函数返回Destination,并将其分配给MyDestination

char *NSV_String_Copy (char *Source, char *Destination)
{
    if (Destination != NULL)
        free(Destination);
    int len = strlen(Source);
    Destination = malloc(len + 1);
    memmove(Destination, Source, len);
    Destination[len] = '';             //null terminate
    return Destination;
}
int main( void )
{
    char *MySource = "abcd";
    char *MyDestination = NULL;
    MyDestination = NSV_String_Copy(MySource, MyDestination);
    printf("%sn", MyDestination);
}

相关内容

  • 没有找到相关文章

最新更新