【问题标题】:is it possible to overwrite strdup from <string.h> with my own?是否可以用我自己的 <string.h> 覆盖 strdup?
【发布时间】:2018-07-08 15:37:47
【问题描述】:

我需要这样做,因为我应该存根这个函数以进行单元测试。

我使用的是 gcc 版本 5.4.0。

对于 glibc 中存在的许多其他函数,比如 memcpy,我只是在我的 .c 文件中编写了实现,然后这个实现是使用的那个而不是原始的,但是在 strdup 和其他一些函数的情况下,我得到一个像这样的编译错误:

error: expected identifier or ‘(’ before ‘__extension__’
 char* strdup (const char *__s)

我知道这是因为我正在尝试使用 string.h 中已经存在的函数名称,尽管它也可以与它们中的其他一些函数一起使用。我想知道是否有可能以某种方式绕过它。

【问题讨论】:

标签: c gcc googletest glibc


【解决方案1】:

在您的情况下,原始 strdup 看起来是一个预处理器宏,而不是实际函数。您可以尝试摆脱它:

#undef strdup
char *strdup(const char *s) {
    // your code goes here
}

【讨论】:

  • 我刚刚试了一下,它允许我编译没有错误,但它仍然使用原始实现而不是存根。我也尝试存根 __strdup 并且它的行为相同。
  • 抱歉,它确实有效,但我遇到了另一个导致分段错误的问题,因为我将空指针传递给“strdup”,所以我认为问题仍然存在。
猜你喜欢
  • 2014-09-08
  • 1970-01-01
  • 1970-01-01
  • 2020-10-07
  • 2017-05-28
  • 1970-01-01
  • 2022-07-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多