strcpy_s 不使用 gcc

strcpy_s not working with gcc

我有一个 C++11 项目,我添加了一些 strcpy_s 方法调用。 这适用于 windows,但在 gcc 上编译时,出现错误 说明未找到 strcpy_s 符号。

我确实添加了行

#define __STDC_WANT_LIB_EXT1__ 1

给代码,没用。

GCC(或者更确切地说,glibc)不支持 strcpy_s() 和朋友。有关在哪里可以找到支持它们的库的一些想法,请参见此处:Are there any free implementations of strcpy_s and/or TR24731-1?

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。小心一些,它可以是安全的。