linux C函数之strdup函数分析【转】
本文转载自:http://blog.csdn.net/tigerjibo/article/details/12784823
linux C函数之strdup函数分析
一.函数分析
1.函数原型:
- #include <string.h>
- char *strdup(const char *s);
2.功能:
strdup()函数主要是拷贝字符串s的一个副本,由函数返回值返回,这个副本有自己的内存空间,和s没有关联。strdup函数复制一个字符串,使用完后,要使用delete函数删除在函数中动态申请的内存,strdup函数的参数不能为NULL,一旦为NULL,就会报段错误,因为该函数包括了strlen函数,而该函数参数不能是NULL。
3.strdup函数实现
- char * __strdup(const char *s)
- {
- size_t len = strlen(s) +1;
- void *new = malloc(len);
- if (new == NULL)
- return NULL;
- return (char *)memecpy(new,s,len);
- }
4.函数实例
- #include <syslib.h>
- #include<string.h>
- int main(void)
- {
- char *src =”This is the jibo”;
- char *dest;
- dest = strdup(s);
- printf(“the dest %s\n”,dest);
- return 0;
- }
二.strdup与strcpy函数的区别
1.共同点:
两个函数都实现了字符串的拷贝。
2.不同点:
1)strcpy函数:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间
2)实现:
- char *strcpy(char *strdest,const char *strsrc)
- {
- assert((strdest!=NULL) &&(strsrc!=NULL));
- char *address = strdest;
- while((*strdest ++ = *strstrc++) !=’\0’) ;
- return address;
- }
3)由strcpy和strdup函数实现可知
1>strdup函数返回指向被复制的字符串的指针,所需空间由malloc()函数分配且可以由free()函数释放。stdrup可以直接把要复制的内容复制给没有初始化的指针,因为它会自动分配空间给目的指针。
2>strcpy的目的指针一定是已经分配好的内存指针。
4)strdup的缺点:
使用strdup函数的时候,往往会忘记内存的释放,因为申请内存空间的动作是在strdup函数内实现,如果对该函数的实现不是很了解,则会忘记使用free函数来释放空间。
linux C函数之strdup函数分析【转】相关推荐
- linux C函数之strdup函数分析
本文转载自:http://blog.csdn.net/tigerjibo/article/details/12784823 linux C函数之strdup函数分析 一.函数分析 1.函数原型: #i ...
- 【造轮子】实现 strdup 函数
1. 函数简介 strdup 函数为 C 库函数之一,用于获取一个位于堆空间的与指定的字符串一致的字符串. 原型:char* strdup (const char* str); 所属头文件:<s ...
- linux EHCI DRIVER之中断处理函数ehci_irq()分析(二)
先上代码, 1. static void scan_async (struct ehci_hcd *ehci) 2. { 3. struct ehci_qh *qh; 4. bool check_ ...
- linux waitpid实例,【Linux】僵尸进程,孤儿进程以及wait函数,waitpid函数(有样例,分析很详细)...
本文内容: 1.僵尸进程,孤儿进程的定义,区别,产生原因,处理方法 2.wait函数,waitpid函数的分析,以及比较 背景:由于子进程的结束和父进程的运行是一个异步的过程,即父进程永远无法预测子进 ...
- Linux系统函数之IO函数
技术交流 QQ 群:1027579432,欢迎你的加入! 欢迎关注我的微信公众号:CurryCoder的程序人生 1.标准C库IO函数工作流程 IO缓冲区的作用? 大部分硬盘都是机械硬盘,读取寻道时间 ...
- 【Linux系统编程】vfork() 函数详解
00. 目录 文章目录 00. 目录 01. vfork函数 02. fork和vfork区别 03. 父子进程地址空间 04. 附录 01. vfork函数 函数分析 #include <sy ...
- linux 算法函数,数据结构——算法之(012)( linux C 全部字符串操作函数实现)...
数据结构--算法之(012)( linux C 所有字符串操作函数实现) 题目:实现linux C下常用的字符串操作函数 题目分析: 一.面试中可能经常遇到这样的问题:比如strcpy.memcpy. ...
- platform_device和platform_driver的注册过程,及probe函数何时调用的分析
转载于http://blog.chinaunix.net/uid-7828352-id-3833188.html 参考资料:http://blog.csdn.net/xiafeng1113/artic ...
- linux内核信号处理机制--do_signal函数讲解 (适用mips架构)
Linux为了允许用户态进程之间的通信而引入signal.此外, 内核使用signal给进程通知系统事件 对于信号signal,你要记住的基本点如下: 信号分实时信号(编码值为[32,64 ...
最新文章
- Docker配置远程连接端口
- 2. 离散特征处理方法--特征交叉 feature crosses
- Spark入门实战系列--6.SparkSQL(中)--深入了解SparkSQL运行计划及调优
- linux nice线程,linux nice 线程
- LightOJ 1088 - Points in Segments 二分
- 【MySQL】设置MySQL密码
- iOS html5使用缓存并及时更新方案总结
- 外挂学习之路(3)--- 内存遍历工具
- 数电六十分通关法则(更新中)
- ai作文批改_有道词典上线AI作文批改功能,可自动批改雅思、四六级作文
- 地质勘查项目管理困难重重,需要专业软件来解决
- matlab中ode45是什么意思,matlab中的ode45
- ROS机器人操作系统现场培训课程|2017年9月
- 深度学习网络各种激活函数 Sigmoid、Tanh、ReLU、Leaky_ReLU、SiLU、Mish
- 大数据算法_大数据算法解析,如何创建用户画像实现千人千面?
- 基于STL的演讲比赛流程管理系统(C++STL实战)
- Edge浏览器爱上WebVR
- HFSS学习笔记——T型波导
- Linux下安装中文字体库
- 公专融合对讲机是如何实现多模式通信下的协同工作?
热门文章
- 业余实现一个统计A股数据工具
- [物理学与PDEs]第2章习题13 将 $p$ - 方程组化为守恒律形式的一阶拟线性对称双曲组...
- 让 QtWebkit 支持跨域CROS - nowboy的CSDN博客 - 博客频道 - CSDN.NET
- ubuntu 安装 codelite
- 走向ASP.NET架构设计-第六章-服务层设计(中篇)
- Java 虚拟机总结给面试的你(中)
- Java中的多线程你只要看这一篇就够了
- [CareerCup] 17.7 English Phrase Describe Integer 英文单词表示数字
- 实战:将静态路由发布到动态路由
- Fedora 20 安装搜狗拼音输入法