med*_*dis 0 c reference undefined tr24731 strcpy
我按照这本书,无法编译这个例子.有什么建议?
1 #define __STDC_WANT_LIB_EXT1__ 1
2 #include <string.h>
3 #include <stdio.h>
4
5
6 int main(void)
7 {
8 char source[] = "Here we go...";
9 char destination[50];
10
11 if(strcpy_s(destination, sizeof(destination), source))
12 printf("An error occurred copying the string.n");
13
14
15 return 0;
16 }
Run Code Online (Sandbox Code Playgroud)
错误:
/tmp/ccc5KZDZ.o: In function `main':
test.c:(.text+0x48): undefined reference to `strcpy_s'
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
该strcpy_s()功能在TR 24731-1中定义(参见您是否使用TR 24731'安全'功能),以及ISO/IEC 9899:2011(C 2011标准)的可选附件K中.
您可以使用以下命令测试您的实现是否支持它
__STDC_LIB_EXT1__整数常量200509L,用于表示符合本技术报告.
(根据TR).附件K简单地说:
定义的实现
__STDC_LIB_EXT1__应符合本附件中的规范.380)380)未定义的实现
__STDC_LIB_EXT1__不需要符合这些规范.
该答案表明,C 2011标准的TC1(技术勘误1)定义__STDC_LIB_EXT1__了附件K版本功能的201112L(2011年12月).我没有跟踪附件K和TR 24731-1之间是否存在差异.
所以,你应该能够测试你的库是否支持strcpy_s()通过测试__STDC_LIB_EXT1__,但它是可选的.Ulrich Drepper的声明显然,GNU C Library不支持TR 24731-1功能; 我不知道这是否仍然存在.
另外,请注意,某些功能的Microsoft接口与同一功能的标准接口不同(vsnprintf_s()例如).这限制了它们作为跨平台可移植性工具的实用性.