如何在strcat()中返回指针

时间:2010-09-30 18:20:36

标签: c pointers strcat

嘿伙计们我想弄清楚strcat()是如何返回指针的,所以我尝试实现自己的strcat()来看看它是如何工作的。以下是我的mystrcat()代码,它的工作原理类似于真正的strcat():

char *mystrcat(char *destination, char *source)
{
    char *str = destination;

    while (*str != '\0')
    {
        str++;
    }

    while (*source != '\0')
    {
        *str = *source;
        str++;
        source++;
    }
    *str = '\0';

    return str;
}

让我们说在我的主要()中,我有

char string[BUFSIZ];
mystrcat(string, "hello");
printf("%s\n", string);

输出为

hello

正如所料。我没有得到的是如何返回局部变量str的地址将神奇地使变量,字符串指向它,以及为什么变量str在函数终止时不被删除。

3 个答案:

答案 0 :(得分:1)

您没有返回局部变量的地址。您将返回局部变量的。由于有问题的变量是一个指针,它的值恰好是一个地址。 str变量中包含的地址指向由参数destination提供的内存块。

你似乎误解的是:

char* str = destination;

不创建destination字符串的副本。它创建一个名为str的指针,指向destination指向的同一内存位置。当您使用str来操纵该内存块中的字符时,destination表示的字符串也会被修改,因为strdestination指向完全相同内存中的字符串。这就是它“神奇地更新”参数的方式。

答案 1 :(得分:0)

str是指向您传入的字符串(目标)的指针,因此您要从string函数中修改原始变量strcat

指针str确实在例程结束时被删除,但不再需要它了。

顺便说一句,使用“string”这个词作为变量的名称很困惑,因为许多语言都将string保留为关键字。

答案 2 :(得分:0)

该函数的第一行,您将* str指定为与* destination相同。实际上,当您返回时,您将返回* destination,这与* str。

相同

没有分配内存,因此不能删除任何内存。