Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C11中使用strdup_C_Gcc_C11 - Fatal编程技术网

在C11中使用strdup

在C11中使用strdup,c,gcc,c11,C,Gcc,C11,我能够使用gcc版本4.7.2编译以下内容 #include <string.h> int main(){ char text[] = "String duplicate"; char* dup = strdup(text); return 0; } 导致此警告的原因是什么?请阅读strdup的手册 man strdup 你可以找到 glibc的功能测试宏要求(参见功能测试宏(7)): strdup(): _SVID|u源| | u

我能够使用gcc版本4.7.2编译以下内容

   #include <string.h>

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

   }

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

请阅读strdup的手册

man strdup
你可以找到

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

strdup(): _SVID|u源| | u BSD|u源| | u XOPEN|u源>=500 | | u XOPEN|u源和扩展 ||/*自glibc 2.12以来:**/_POSIX_C_SOURCE>=200809L

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

因此,您可以通过

gcc -D_BSD_SOURCE -std=c11 <your source file>
gcc-D\u BSD\u源代码-std=c11

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

您想要--std=gnu11或--std=c11-D_GNU_源代码

相关:建议strdup在c11中是标准的,但我在其他任何地方都找不到。我不认为strdup是C标准,因为我记得它只是一个poix函数。\u BSD_源代码是一个不寻常的选择。使用-D_POSIX_C_SOURCE=200809L是一个更广泛、更有用的标准。
gcc -D_BSD_SOURCE -std=c11 <your source file>