在C11中使用strdup
我能够使用gcc版本4.7.2编译以下内容在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
#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>