web-dev-qa-db-ja.com

strcpy_sがgccで機能しない

C++ 11プロジェクトがあり、strcpy_sメソッド呼び出し。これはWindowsで機能しますが、gccでコンパイルすると、strcpy_sシンボルが見つかりません。

行を追加しました

#define __STDC_WANT_LIB_EXT1__ 1

コードに、無駄に。

12
Jacko

GCC(またはむしろglibc)はstrcpy_s()およびそのフレンドをサポートしていません。それらをサポートするライブラリをどこで見つけることができるかについてのいくつかのアイデアについては、ここを参照してください: strcpy_sやTR24731-1の無料の実装はありますか?

9
John Zwinck

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 を使用できます。少し注意すれば安全です。

6
krzaq