我有一个C ++ 11项目,我添加了一些strcpy_s
方法调用。
这适用于Windows,但在gcc上编译时,会出现错误
说明找不到strcpy_s
符号。
我确实添加了一行
#define __STDC_WANT_LIB_EXT1__ 1
代码,无济于事。
答案 0 :(得分:9)
GCC(或更确切地说,glibc)不支持strcpy_s()
和朋友。有关您可以在哪里找到支持它们的库的一些想法,请参见此处:Are there any free implementations of strcpy_s and/or TR24731-1?
答案 1 :(得分:6)
strcpy_s
和朋友们还不是C ++的一部分。似乎C++17将拥有它们,但是现在提供它们取决于实现。似乎glibc没有。
事实上,根据cppreference,__STDC_WANT_LIB_EXT1__
仅在定义__STDC_LIB_EXT1__
时才有效。在我的Arch Linux上,它不是。
#ifdef __STDC_LIB_EXT1__
constexpr bool can_have_strcpy_s = true;
#else
constexpr bool can_have_strcpy_s = false;
#endif
您可以使用strncpy
。小心点,它可以是安全的。