在C11中使用strdup

时间:2013-10-28 17:39:10

标签: c gcc c11

我可以使用gcc version 4.7.2

编译以下内容
   #include <string.h>

   int main(){
    char text[] = "String duplicate";
    char* dup = strdup(text);
    return 0;

   }

但是当我使用--std = c11标志时,我收到以下警告:

warning: implicit declaration of function ‘strdup’ [-Wimplicit-function-declaration]
warning: initialization makes pointer from integer without a cast [enabled by default]

导致此警告的原因是什么?

2 个答案:

答案 0 :(得分:8)

通过

阅读 strdup 手册
man strdup

你可以找到

  

glibc的功能测试宏要求(参见feature_test_macros(7)):

     

的strdup():              _SVID_SOURCE || _BSD_SOURCE || _XOPEN_SOURCE&gt; = 500 || _XOPEN_SOURCE&amp;&amp; _XOPEN_SOURCE_EXTENDED              || / *由于glibc 2.12:* / _POSIX_C_SOURCE&gt; = 200809L

表示 strdup 符合SVr4,4.3BSD,POSIX.1-2001。

所以你可以通过

摆脱警告
gcc -D_BSD_SOURCE -std=c11 <your source file>

我猜这些警告是由c11引起的,不能启用上述宏之一。

答案 1 :(得分:3)

你想要--std = gnu11或--std = c11 -D_GNU_SOURCE