19

C++11 プロジェクトがあり、いくつかのstrcpy_sメソッド呼び出しを追加しました。これは Windows では機能しますが、gcc でコンパイルすると、strcpy_sシンボルが見つからないというエラーが発生します。

私は行を追加しました

#define __STDC_WANT_LIB_EXT1__ 1

コードに、無駄に。

4

2 に答える 2

18

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

于 2016-10-14T14:49:44.487 に答える
9

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。少し気をつければ、安全かもしれません。

于 2016-10-14T14:52:34.670 に答える