strcpy_s无法使用gcc

Jac*_*cko 8 c++ gcc tr24731 strcpy c++11

我有一个C++ 11项目,我添加了一些strcpy_s方法调用.这适用于Windows,但在gcc上编译时,会出现错误,指出strcpy_s找不到符号.

我确实加了这条线

#define __STDC_WANT_LIB_EXT1__ 1

对代码,无济于事.

Joh*_*nck 9

GCC(或者更确切地说,glibc)不支持strcpy_s()和朋友.有关哪里可以找到支持它们的库的一些想法,请参见:strcpy_s和/或TR24731-1是否有任何免费实现?

  • 谢谢,约翰。我刚刚自己实现了它。 (2认同)

krz*_*zaq 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
Run Code Online (Sandbox Code Playgroud)

你可以用strncpy.小心一点,它可以是安全的.

  • 回复:“那你为什么不使用 strncpy 呢?” ——嗯,因为它不起作用?是的,你可以让它工作,但它并不是被设计为“安全”地替代“strcpy”,而且它也不是。 (3认同)