嘿伙计们我想弄清楚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在函数终止时不被删除。
答案 0 :(得分:1)
您没有返回局部变量的地址。您将返回局部变量的值。由于有问题的变量是一个指针,它的值恰好是一个地址。 str
变量中包含的地址指向由参数destination
提供的内存块。
你似乎误解的是:
char* str = destination;
不创建destination
字符串的副本。它创建一个名为str
的指针,指向destination
指向的同一内存位置。当您使用str
来操纵该内存块中的字符时,destination
表示的字符串也会被修改,因为str
和destination
指向完全相同内存中的字符串。这就是它“神奇地更新”参数的方式。
答案 1 :(得分:0)
str
是指向您传入的字符串(目标)的指针,因此您要从string
函数中修改原始变量strcat
。
指针str
确实在例程结束时被删除,但不再需要它了。
顺便说一句,使用“string”这个词作为变量的名称很困惑,因为许多语言都将string
保留为关键字。
答案 2 :(得分:0)
该函数的第一行,您将* str指定为与* destination相同。实际上,当您返回时,您将返回* destination,这与* str。
相同没有分配内存,因此不能删除任何内存。