上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
3.1.3 复制字符串到最近申请的单元strdup()
【函数原型】char* strdup(char* s)
【功能讲解】复制字符串s,返回值为指向复制字符串的指针,所需的空间由malloc()分配,需要函数free()释放。
【参数说明】被复制的字符地址。
【程序示例】本例程展示如何使用strdup复制字符串,并且一定要记得释放本函数申请的内存空间,否则会造成内存泄露。
/*函数strdup()示例*/ #include<string.h> #include<stdio.h> #include<stdlib.h> /*定义函数[使用strdup()复制字符串*/ unsigned int TestCopy() { char buf[] = "Do not forget free me!"; char* res_p = strdup(buf); /*复制*/ printf("Copy:%s\n",res_p); return (unsigned int)(res_p); /*直接返回[没有释放*/ } int main(void) { /*调用函数TestCopy()[得到复制的字符串指针*/ unsigned int pch = TestCopy(); printf("Warning:%s\n",(char*)pch);/*显示出来*/ free((void*)pch);/*释放内存*/ return 0; }
【运行结果】
Copy:Do not forget free me! warning:Do not forget free me!
【实例讲解】本例首先定义了一个函数TestCopy(),此函数内部调用strdup()复制字符串,然后显示复制的结果,但是并没有释放内存,而是把函数内部申请的指针当做了函数的返回值。在main()函数中再次打印该指针,还能显示同样的内容,说明内存没有被自动释放,需要手动释放该内存,否则会造成内存泄露!不过该函数不会自动释放内存也有一个好处,就是函数内部申请的数据可以传到函数外继续使用,而不用定义全局变量之类的方法来实现此功能。记得无论如何,最后一定要释放内存。