strdup函数
/*
功 能: 将串拷贝到新建的位置处
strdup()在内部调用了malloc()为变量分配内存,不需要使用返回的字符串时,需要用free()释放相应的内存空间,否则会造成内存泄漏。
这个函数在linux的man手册里解释为:
The strdup() function returns a pointer toa new string which is a
duplicate of the string s. Memory for thenew string is obtained with
malloc(3), and can be freed with free(3).
The strndup() function is similar, but onlycopies at most n charac-
ters. If s is longer than n, only ncharacters are copied, and a termi-
nating NUL is added.
strdup函数原型:
strdup()主要是拷贝字符串s的一个副本,由函数返回值返回,这个副本有自己的内存空间,和s不相干。
strdup函数复制一个字符串,使用完后要记得删除在函数中动态申请的内存,s
trdup函数的参数不能为NULL,一旦为NULL,就会报段错误,因为该函数包括了strlen函数,而该函数参数不能是NULL。
strdup 内部在堆上创建了一个备份,所以即使没看到malloc也应该在使用完毕后得自己手动释放(free);
strcpy 使用的时候,必须已经拥有了足够的空间才行。
警告,最好不要使用这个函数,因为很容易忘记释放内存,造成内存泄露。
*/
-
#include <stdio.h>
-
#include <malloc.h>
-
#include <string.h>
-
-
char* strdup(const char *s)
-
{
-
size_t len =strlen (s) + 1;
-
void *newbase =malloc (len);
-
if (newbase == NULL)
-
{
-
return NULL;
-
}
-
-
return (char *)memcpy (newbase, s, len);
-
}
-
-
-
-
int main(void)
-
{
-
char *dup_str, *string = "abcde";
-
-
dup_str = strdup(string);
-
printf("%s\n", dup_str);
-
free(dup_str);
-
-
return 0;
-
}
文章来源: blog.csdn.net,作者:悦来客栈的老板,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/qq523176585/article/details/11922287
- 点赞
- 收藏
- 关注作者
评论(0)