这两者很让人头疼,虽然现在用的是C++编程,但是有时候移植一些第三方库,要是用C语言写的,就有可能遇到这个问题。今天去详细了解了一下。
先看看它们的使用介绍(二者用法一样,就是出现的环境不一样):
strdup()函数是c语言中常用的一种字符串拷贝库函数,一般和free()函数成对出现。
原型:
extern
char *strdup(char *s);
头文件:string.h
char *strdup(const char *s)
{
char *t = NULL;
if (s && (t = (char*)malloc(strlen(s) + 1)))
strcpy(t, s);
return t;
} 说明:
返回一个指针,指向为复制字符串分配的空间;如果分配空间失败,则返回NULL值。
二者区别:
strdup是POSIX: _strdup是Windows特定: 在Unix上,使用的strdup。
建议(摘录网上):
在不同的平台上,我们对于strdup内存分配的函数可能采用不同的方法,比如在某些c库中用malloc来分配,而在某些c++库中,用new来分配 (因为c++库可能重写了相关的c库代码)。所以对使用者在释放它的时候产生了很大的疑惑,是用free还是用delete[]来释放所分配的内存呢?! 如果我们主管臆断,用free来释放它,操作未知。可能工作正常,可能是部分内存泄漏,也可能是程序崩溃。自己程序的正确性依赖于编译器,很不爽吧!
本文详细介绍了strdup和_strdup这两个字符串拷贝函数的区别及其应用场景。strdup是POSIX标准的一部分,而_strdup则为Windows特有。文章还探讨了在不同平台和编程环境下如何正确地使用这些函数,并给出了实现代码示例。
436





