c - strdup() 函数

标签 c strdup

我最近意识到我在 OS X 上经常使用的 strdup() 函数不是 ANSI C 的一部分,而是 POSIX 的一部分。我不想重写我所有的代码,所以我想我只是要编写我自己的 strdup() 函数。这并不难,真的,它只是一个 malloc() 和一个 strcpy()。无论如何,我有这个函数,但是如果我编写这个函数并将它链接到我的代码,并且它已经存在于 libc 中,我在做什么?我的链接器或编译器是否允许我基本上定义我自己的函数版本,还是我必须给它另一个名字?如果有一种方法可以重用相同的名称,那将非常方便,这样如果 strcpy() 存在于用户的 libc 中,他们就可以使用它,但如果它不存在于他们的 libc 中,他们可以改用我的版本,尽可能少地更改代码。

简短版本:

a) 当我自己编写与内置函数同名的函数时会发生什么?

b) 我可以做些什么来避免在没有 strdup() 的平台上发生不好的事情,而无需重写我的所有代码以不使用 strdup(),这有点乏味?

最佳答案

通常,在某个编译器下,您只需使用#if 来定义您想要的函数。如果内置库没有定义strdup,你自己定义也没有问题(除非以后他们定义了,你就得把它拿出来。)

// Only define strdup for platforms that are missing it..
#if COMPILER_XYZ || COMPILER_ABC
char *strdup(const char *)
{
   // ....
}
#endif

关于c - strdup() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/482375/

相关文章:

c - 我如何使用 clone() 系统调用而不是通常的 fork() + exec() 组合?

c - 内存资源(strdup)

c - Strdup() 不工作

c++ - 如何计算帧缓冲区间距?

c - 安全地从 struct sockaddr 转换为 struct sockaddr_storage

c - 使用openssl加密和解密一个小文件

c - 在 "C"头文件中声明的静态函数

c - 如何更安全地编写此 C 片段?

c++ - 循环中的免费 strdup 输出