忘记strdup吧

原创 2006年06月16日 16:06:00
最近在看别人编写的c语言源代码,很多人喜欢使用strdup来复制字符串,我觉得这个习惯不好,因为如果想使自己的程序移植性更好的话,就忘记有这个函数吧。我否定它的主要原因是:
1)用strdup函数的时候,往往我们会忘记内存的释放,可能的原因是对于C库函数的了解不够,毕竟是其他模块分配内存,自己模块释放它。
2)在不同的平台上,我们对于strdup内存分配的函数可能采用不同的方法,比如在某些c库中用malloc来分配,而在某些c++库中,用new来分配(因为c++库可能重写了相关的c库代码)。所以对使用者在释放它的时候产生了很大的疑惑,是用free还是用delete[]来释放所分配的内存呢?!如果我们主管臆断,用free来释放它,操作未知。可能工作正常,可能是部分内存泄漏,也可能是程序崩溃。自己程序的正确性依赖于编译器,很不爽吧

我觉得,在模块中,除非万不得已自己分配的内存需要其他模块释放,否则应该自产自销,尽量避模块之间的这种耦合性,减少内存泄漏的因素。那么读者可能会问,如果字符串复制经常用到,类似于下面的一个代码
char *dest = malloc( strlen( src ) + 1 );
assert( dest != NULL );
strcpy( dest, src );
经常要被使用,写3行代码比较罗嗦,那么不妨使用宏来搞定它吧。这样做的好处是确定了内存是用malloc分配的,移植性好多了,难道不是吗?!此外,自己定义的宏,分配内存后要释放,总不会忘记吧

上述仅仅是个人的观点,仅供参考!

strdup 和 _strdup 的使用及区别

这两者很让人头疼,虽然现在用的是C++编程,但是有时候移植一些第三方库,要是用C语言写的,就有可能遇到这个问题。今天去详细了解了一下。 先看看它们的使用介绍(二者用法一样,就是出现的环境不一...

C语言 - strdup()函数复制字符串的实现

strdup()函数复制字符串的实现

C语言中的strdup()和strndup()函数

strdup() 和 strndup() 函数的原型分别为: #include char *strdup(const char *s); char *strndup(const char *s, ...

strdup与strcpy具体的区别

 我分别在XP的环境和linux环境下编译运行C代码,我发现一个不解的现象: 现象描述: 两个字符串 char* from, char* to;要把from的内容复制给to。 我在XP下,用strcp...

strdup()函数实现

#include #include #includechar * my_strdup(char *src); char *my_strdup(char *src) { if(NULL == s...

strdup函数的用法

函数名: strdup 功  能: 将串拷贝到新建的位置处 用  法: char *strdup(char *str);   这个函数在linux的man手册里解释为: ...

strdup

#include stdio.h> #include string.h> #include alloc.h> int main(void) { char *dup_str, *string = "...
  • jorien
  • jorien
  • 2011年11月01日 23:01
  • 1194

编写名为strdup的函数

  • 2012年08月01日 20:33
  • 387B
  • 下载

由strdup及strndup想到的一些问题

这个函数在linux的man手册里解释为:        The  strdup()  function  returns  a  pointer to a new string which is ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:忘记strdup吧
举报原因:
原因补充:

(最多只允许输入30个字)