本文转载自:http://blog.csdn.net/tigerjibo/article/details/12784823

linux C函数之strdup函数分析

一.函数分析

1.函数原型:

[cpp] view plaincopy
  1. #include <string.h>
  2. char *strdup(const char *s);

2.功能:

strdup()函数主要是拷贝字符串s的一个副本,由函数返回值返回,这个副本有自己的内存空间,和s没有关联。strdup函数复制一个字符串,使用完后,要使用delete函数删除在函数中动态申请的内存,strdup函数的参数不能为NULL,一旦为NULL,就会报段错误,因为该函数包括了strlen函数,而该函数参数不能是NULL。

3.strdup函数实现

[cpp] view plaincopy
  1. char * __strdup(const char *s)
  2. {
  3. size_t  len = strlen(s) +1;
  4. void *new = malloc(len);
  5. if (new == NULL)
  6. return NULL;
  7. return (char *)memecpy(new,s,len);
  8. }

4.函数实例

[cpp] view plaincopy
  1. #include <syslib.h>
  2. #include<string.h>
  3. int main(void)
  4. {
  5. char *src =”This is the jibo”;
  6. char *dest;
  7. dest = strdup(s);
  8. printf(“the dest %s\n”,dest);
  9. return 0;
  10. }

二.strdup与strcpy函数的区别

1.共同点:

两个函数都实现了字符串的拷贝。

2.不同点:

1)strcpy函数:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间

2)实现:

[cpp] view plaincopy
  1. char *strcpy(char *strdest,const char *strsrc)
  2. {
  3. assert((strdest!=NULL) &&(strsrc!=NULL));
  4. char *address = strdest;
  5. while((*strdest ++ = *strstrc++) !=’\0’) ;
  6. return address;
  7. }

3)由strcpy和strdup函数实现可知

1>strdup函数返回指向被复制的字符串的指针,所需空间由malloc()函数分配且可以由free()函数释放。stdrup可以直接把要复制的内容复制给没有初始化的指针,因为它会自动分配空间给目的指针。

2>strcpy的目的指针一定是已经分配好的内存指针。

4)strdup的缺点:

使用strdup函数的时候,往往会忘记内存的释放,因为申请内存空间的动作是在strdup函数内实现,如果对该函数的实现不是很了解,则会忘记使用free函数来释放空间。

linux C函数之strdup函数分析【转】相关推荐

  1. linux C函数之strdup函数分析

    本文转载自:http://blog.csdn.net/tigerjibo/article/details/12784823 linux C函数之strdup函数分析 一.函数分析 1.函数原型: #i ...

  2. 【造轮子】实现 strdup 函数

    1. 函数简介 strdup 函数为 C 库函数之一,用于获取一个位于堆空间的与指定的字符串一致的字符串. 原型:char* strdup (const char* str); 所属头文件:<s ...

  3. linux EHCI DRIVER之中断处理函数ehci_irq()分析(二)

    先上代码, 1. static void scan_async (struct ehci_hcd *ehci) 2. { 3.  struct ehci_qh *qh; 4.  bool check_ ...

  4. linux waitpid实例,【Linux】僵尸进程,孤儿进程以及wait函数,waitpid函数(有样例,分析很详细)...

    本文内容: 1.僵尸进程,孤儿进程的定义,区别,产生原因,处理方法 2.wait函数,waitpid函数的分析,以及比较 背景:由于子进程的结束和父进程的运行是一个异步的过程,即父进程永远无法预测子进 ...

  5. Linux系统函数之IO函数

    技术交流 QQ 群:1027579432,欢迎你的加入! 欢迎关注我的微信公众号:CurryCoder的程序人生 1.标准C库IO函数工作流程 IO缓冲区的作用? 大部分硬盘都是机械硬盘,读取寻道时间 ...

  6. 【Linux系统编程】vfork() 函数详解

    00. 目录 文章目录 00. 目录 01. vfork函数 02. fork和vfork区别 03. 父子进程地址空间 04. 附录 01. vfork函数 函数分析 #include <sy ...

  7. linux 算法函数,数据结构——算法之(012)( linux C 全部字符串操作函数实现)...

    数据结构--算法之(012)( linux C 所有字符串操作函数实现) 题目:实现linux C下常用的字符串操作函数 题目分析: 一.面试中可能经常遇到这样的问题:比如strcpy.memcpy. ...

  8. platform_device和platform_driver的注册过程,及probe函数何时调用的分析

    转载于http://blog.chinaunix.net/uid-7828352-id-3833188.html 参考资料:http://blog.csdn.net/xiafeng1113/artic ...

  9. linux内核信号处理机制--do_signal函数讲解 (适用mips架构)

        Linux为了允许用户态进程之间的通信而引入signal.此外, 内核使用signal给进程通知系统事件 对于信号signal,你要记住的基本点如下:   信号分实时信号(编码值为[32,64 ...

最新文章

  1. Docker配置远程连接端口
  2. 2. 离散特征处理方法--特征交叉 feature crosses
  3. Spark入门实战系列--6.SparkSQL(中)--深入了解SparkSQL运行计划及调优
  4. linux nice线程,linux nice 线程
  5. LightOJ 1088 - Points in Segments 二分
  6. 【MySQL】设置MySQL密码
  7. iOS html5使用缓存并及时更新方案总结
  8. 外挂学习之路(3)--- 内存遍历工具
  9. 数电六十分通关法则(更新中)
  10. ai作文批改_有道词典上线AI作文批改功能,可自动批改雅思、四六级作文
  11. 地质勘查项目管理困难重重,需要专业软件来解决
  12. matlab中ode45是什么意思,matlab中的ode45
  13. ROS机器人操作系统现场培训课程|2017年9月
  14. 深度学习网络各种激活函数 Sigmoid、Tanh、ReLU、Leaky_ReLU、SiLU、Mish
  15. 大数据算法_大数据算法解析,如何创建用户画像实现千人千面?
  16. 基于STL的演讲比赛流程管理系统(C++STL实战)
  17. Edge浏览器爱上WebVR
  18. HFSS学习笔记——T型波导
  19. Linux下安装中文字体库
  20. 公专融合对讲机是如何实现多模式通信下的协同工作?

热门文章

  1. 业余实现一个统计A股数据工具
  2. [物理学与PDEs]第2章习题13 将 $p$ - 方程组化为守恒律形式的一阶拟线性对称双曲组...
  3. 让 QtWebkit 支持跨域CROS - nowboy的CSDN博客 - 博客频道 - CSDN.NET
  4. ubuntu 安装 codelite
  5. 走向ASP.NET架构设计-第六章-服务层设计(中篇)
  6. Java 虚拟机总结给面试的你(中)
  7. Java中的多线程你只要看这一篇就够了
  8. [CareerCup] 17.7 English Phrase Describe Integer 英文单词表示数字
  9. 实战:将静态路由发布到动态路由
  10. Fedora 20 安装搜狗拼音输入法