【发布时间】:2016-02-17 02:41:42
【问题描述】:
我用 C 编写程序。我读到了 strdup() 函数。据我所知,strdup() 函数分配空间,而strcpy() 没有。但是strdup() 的问题是它分配空间但不释放它。 strdupa() 分配和释放空间。但在某些地方我读到strdupa() 函数很危险。如果有人能告诉我为什么strdupa() 很危险,那将会很有帮助。此外,当我尝试在我的 Open Suse 12.1 32 位系统中运行程序时,gcc 给出了一个错误,提示 strdupa() 不存在。如果strdupa() 是一个危险的功能,有人可以告诉我strdupa() 的副本以及使用该功能时要使用的标题。
【问题讨论】:
-
“但是 strdup() 的问题是它分配空间但不释放它”。
malloc也有这个“问题”。关键是它本身不是问题,因为调用代码可以free它。有些人认为,如果编码人员忘记释放内存,可能会导致内存泄漏。但在许多情况下,您实际上确实希望内存在当前函数之外持续存在,因此实际上不释放内存是我们想要的。 -
所以你说使用 strdup() 函数比使用 strdupa() 更好
-
不,我说的是适合工作的正确工具。
-
所以你的意思是说,将一个字符串复制到另一个字符串并自动分配内存,strdup() 更好。
-
这不是“更好”或“更差”的问题。关键是,如果你使用“strdup()”,那么你需要知道它执行了一个“malloc()”,而“free()”是你的责任。如果字符串需要在复制它的函数之外持续存在,这正是您想要和需要的行为。作为补充说明,"strdup()" 是 Posix 标准,“strdupa()”不是。