gpt4 book ai didi

c - strdup() 函数

转载 作者:太空狗 更新时间:2023-10-29 16:33:13 26 4
gpt4 key购买 nike

我最近意识到我在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com