,,C语言中的strdup()函数和其与strcpy()函数的区别

,,C语言中的strdup()函数和其与strcpy()函数的区别

本文主要介绍C语言中的strdup()函数以及strcpy()函数和strcpy函数的区别。同样用来复制字符串的两个函数的异同点值得注意,有需要的朋友可以参考一下。

头文件:

#包含字符串. h

定义功能:

char * strdup(const char * s);

函数描述:strdup()会先用maolloc()配置与参数s字符串相同的空间大小,然后将参数s字符串的内容复制到内存地址,再返回地址。地址终于可以用free()释放了。

返回值:返回一个字符串指针,指向复制的新字符串地址。如果返回NULL,则内存不足。

模型

#包含字符串. h

main(){

char a[]=' strdup ';

char * b;

b=strdup(a);

printf('b[]='%s'\n ',b);

}

执行结果:

b[]='strdup '

strdup()函数和strcpy()函数的区别

Strdup不是标准的C函数,所以linux会报错!~

Strcpy是一个标准的C函数。在windows中,报告错误是因为指针没有申请空间!~

可以先用strlen判断from的大小,然后给to申请空间,然后strcpy就不会报错了!~

Strdup可以直接把要复制的内容复制到未初始化的指针,因为它会自动给目的指针分配空间,使用就结束了。

手动释放系统自动分配的空间。

strcpy的目标指针必须是已分配内存的指针。

最近看了别人写的C语言源代码,很多人都喜欢用strdup复制字符串。我觉得这个习惯不好,因为如果你想让你的程序更有移植性,

这个功能就算了吧。我否认它的主要原因是:

1)使用strdup函数时,我们经常会忘记释放内存。可能的原因是我们对C库函数了解不够。毕竟其他模块分配内存,我们自己的模块释放内存。

2)在不同的平台上,我们可能会对strdup内存分配函数采用不同的方法,比如有些C库中的malloc分配,有些C库中的new分配(因为c++库可能会重写相关的C库代码)。所以用户发布的时候有很大的困惑。他们是使用free还是delete[]来释放分配的内存?如果我们的主管假设,使用free来释放它,操作是未知的。它可能正常工作,可能是部分内存泄漏,也可能是程序崩溃。自己程序的正确性取决于编译器,很不爽!

我认为,在模块中,除非万不得已,自己分配的内存需要其他模块释放,否则就应该自己生产,自己销售。尽量避免模块间的这种耦合,减少内存泄漏的因素。

那么读者可能会问,如果经常使用字符串复制,类似于下面的代码。

char * dest=malloc(strlen(src)1);

断言(dest!=NULL);

strcpy( dest,src);

要经常使用,写3行代码是相当冗长的,所以你也可以使用宏来修复它。这样的好处是内存是由malloc分配的,所以移植性好很多不是吗?另外,自己定义的宏会在内存分配后释放,让你念念不忘。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • 详解c语言中的字符串数组是什么,详解c语言中的字符串数组结构,详解C语言中的字符串数组
  • 表达式求值c++实现,c语言实现表达式求值
  • 看懂c语言基本语法,C语言详解,C语言的基本语法详解
  • 用c语言实现快速排序算法,排序算法设计与实现快速排序C语言,C语言实现快速排序算法实例
  • 深入解析c语言中函数指针的定义与使用方法,深入解析c语言中函数指针的定义与使用情况,深入解析C语言中函数指针的定义与使用
  • 描述E-R图,E-R图举例,关于C语言中E-R图的详解
  • 折半查找法C语言,折半查找算法(算法设计题)
  • 折半查找法C语言,c语言折半法查找数据,C语言实现折半查找法(二分法)
  • 扫雷小游戏c++代码设计,c语言扫雷游戏源代码,C语言实现扫雷小游戏详细代码
  • 怎样统计程序代码行数,C语言统计行数,C#程序员统计自己的代码行数
  • 基于c语言的贪吃蛇游戏程序设计,用c语言编写贪吃蛇游戏程序,C语言实现简单的贪吃蛇游戏
  • 图的两种遍历算法,图的遍历算法代码c语言,Python算法之图的遍历
  • 留言与评论(共有 条评论)
       
    验证码: