strdup函数
来源:互联网 发布:php fstat 编辑:程序博客网 时间:2024/04/30 14:55
strdup函数原型:
strdup()主要是拷贝字符串s的一个副本,由函数返回值返回,这个副本有自己的内存空间,和s不相干。strdup函数复制一个字符串,使用完后要记得删除在函数中动态申请的内存,strdup函数的参数不能为NULL,一旦为NULL,就会报段错误,因为该函数包括了strlen函数,而该函数参数不能是NULL。
函数名: strdup
功 能: 将串拷贝到新建的位置处
用 法: char *strdup(char *str);
strdup的工作原理:
char * __strdup (const char *s){size_t len =strlen (s) + 1;void *new =malloc (len);if (new == NULL)return NULL;return (char *)memcpy (new, s, len);}
实例1:
//C/C++ code#include <stdio.h>#include <string.h>#include <alloc.h>int main(void){char *dup_str,*string = "abcde";dup_str =strdup(string); printf("%s\n", dup_str);free(dup_str); return 0;}
实例2:
#include <stdio.h>#include <stdlib.h>#include <string.h>unsigned int Test(){charbuf[]="Hello,World!";char* pb =strndup(buf,strlen(buf));return (unsignedint)(pb);} int main(){unsigned int pch= Test();printf("Testing:%s\n",(char*)pch);free((void*)pch);return 0;}
在Test函数里使用strndup而出了Test函数仍可以操作这段内存,并且可以释放。
由这个问题而延伸出来的问题就是,如何让函数得到的内存数据传出函数但仍可用。
解决方法目前本人只想到两个: 一个外部变量,如传递一个内存块指针给函数,但这种做法就是你得传递足够的内存,也就是你不能事先知道这个函数到底要多大的BUFFER。
另一种方法就是在函数内部申请static变量,当然这也是全局区的变量,但这种做法的缺点就是,当函数多次运行时,static变量里面的数据会被覆盖。这种类型的另一个方法就是使用全局变量,但这和使用static变量很相同,不同的是全局变量可以操作控制,而static变量如果不把它传出函数,就不可对它操作控制了。另一类方法就是上面所述的,利用堆里的内存来实现,但存在危险。strdup是从堆中分配空间的!strdup调用了malloc,所以它需要释放!对于堆栈:堆是由程序员来管理的,比如说new,malloc等等都是在堆上分配的!
栈是由编译器来管理的。
0 0
- strdup函数
- strdup() 函数
- strdup函数
- strdup函数
- strdup函数
- strdup函数
- strdup函数
- 函数strdup()
- strdup函数
- strdup函数
- strdup函数 -- linux函数
- strdup函数简介
- strdup函数简介
- strdup函数简介
- strdup函数的用法!
- strdup函数的使用
- 函数:strdup()
- strdup函数的用法
- VS2012下基于Glut OpenGL GL_STENCIL_TEST示例程序
- postgersql 新手入门
- js中的静态属性静态方法
- 【转】【转】网络字节序与主机字节序
- JQuery中$.ajax()方法参数详解
- strdup函数
- MATCOM在VC++与MATLAB混合编程中的应用
- IOS面试题之--C面试题指针
- jsp学习小结
- 解决布局点击事件穿透的问题
- 第三章 6题(字母大小写转换)
- iOS获取设备信息的方法
- Notepad++不保存打开历史与查找替换历史的方法
- JQuery easyui中插件的相关知识汇总-不定时更新