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/