0
#include<stdio.h>

char* my_strcpy(char* source, char* destination) {
    char* p = destination;
    while( *source != '\0' ) {
        *p++ = *source++;
    }
    *p = '\0';
    return destination;
}

int main() {
    char stringa[40] = "Time and tide wait for none";
    char stringb[40];
    char *ptr;
    char *ptr1;

    ptr = stringa;
    ptr1 = stringb;

    puts(stringa);
    puts(ptr);

    my_strcpy(ptr, ptr1);
    puts(ptr);

    return 0;
}

这里的变量destination,作为函数的本地副本,返回的指针是安全的。我相信只要返回后立即使用该地址就会是安全的,否则如果其他进程使用该地址,它将被更改。不做怎么安全返回return destination

是否可以执行 mallocp并返回它而不是分配指向的位置destination

4

1 回答 1

3

destination不受 控制my_strcpy,因此在函数之外发生的事情与 . 无关my_strcpy。也就是说,函数返回是完全安全和预期的destination。打电话的人my_strcpy将负责确保变量的内存正常。返回destination变量只是为了方便函数链接。

您可以 malloc 并返回一个新的内存区域(尽管那时您不需要destination参数)。这基本上是 的功能strdup,调用者有责任strdup释放分配的内存。

请注意,没有另一个进程损坏内存的风险。除非您正在处理共享内存,否则每个进程都只能访问它们的内存。在此过程中稍后的某些功能可能会改变您在 中所做的事情my_strcpy,但这不是my_strcpy. 至于在函数之后立即使用它是否安全,您正在复制到分配给您的空间。该p值不是您要写入的内存;它只是指向内存的指针。并且内存本身不在堆栈上。正如 jpw 在某些时候提到的那样-您根本不需要该p变量。

于 2013-07-10T15:30:57.803 回答