char* StringCopy(const char* string) {
    char* newString;
    int len;
    len = strlen(string) ;
    newString = malloc(sizeof(char)*len);

    strcpy(newString, string);
    return(newString);
}


即使newString是本地的,上述代码也可以工作,并且应在函数末尾将其释放。我是C语言的新手,任何解释此问题或解释的链接都将非常有帮助。我的意思是我们不应该收到这样的错误:与本地相关的堆栈内存地址
      变量'newString'返回了吗?

最佳答案

newString是StringCopy函数范围内的局部变量。它被分配了一个指向已分配内存的指针。

当我们从该函数返回时,变量newString将被释放。但是,分配的内存区域(newString指针指向该内存区域)不是。该函数的调用者仍然可以通过返回的指针访问存储区域。

注意:您必须检查malloc的返回值,因为它可能返回NULL。

关于c - C编程:使用堆进行字符串复制,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26900859/

10-12 00:31