为什么我的系统上的strcpy_s不存在?

时间:2016-04-19 16:13:54

标签: c++ header debian clang

我在Debian 8系统上使用clang。我有标准的C ++标头。然而,没有标题定义strcpy_s。这是为什么?

# grep -iRHI 'strcpy_s' /usr 2>/dev/null
/usr/include/x86_64-linux-gnu/bits/string2.h:                ? __strcpy_small (dest, __strcpy_args (src),             \
/usr/include/x86_64-linux-gnu/bits/string2.h:__STRING_INLINE char *__strcpy_small (char *, __uint16_t, __uint16_t,
/usr/include/x86_64-linux-gnu/bits/string2.h:__strcpy_small (char *__dest,
/usr/include/x86_64-linux-gnu/bits/string2.h:__STRING_INLINE char *__strcpy_small (char *, __STRING2_COPY_ARR2,
/usr/include/x86_64-linux-gnu/bits/string2.h:__strcpy_small (char *__dest,
/usr/src/broadcom-sta-6.30.223.248/src/include/bcmutils.h:#define bcm_strcpy_s(dst, noOfElements, src)            strcpy((dst), (src))

2 个答案:

答案 0 :(得分:5)

  

为什么我的系统上的strcpy_s不存在?

strcpy_s不是由C ++标准库提供的。

然而,自C11以来,

strcpy_s由C标准规定。但即使在C11中,strcpy_s也是可选的。所有标准库实现都不提供所有可选功能。所以,答案似乎是:因为你安装的C标准库都没有声明它。

  

如何在我的系统上获得strcpy_s,strtok_s和所有其他安全字符串函数?

您需要找到一个可以全部实现它们的库,或者自己实现它们。

答案 1 :(得分:1)

显然,这些不存在,因为它们不存在。我可以通过查找和安装它们找到并安装它们;或者,通过自己编码。显然这是一个有用的解决方案,所以让upvotes开始吧。