2016-10-14 34 views
3

私はC++ 11プロジェクトを持っており、strcpy_sメソッド呼び出しを追加しました。 これはウィンドウで動作しますが、gccでコンパイルすると、シンボルが見つからないというエラー があります。strcpy_sがgccで動作しない

私は無駄に、ラインにコードに

#define __STDC_WANT_LIB_EXT1__ 1

を追加しました。

+2

機能を調べて、その機能とサポートされている機能を調べましたか?クイックGoogle検索に基づいて私にはC11機能のように見え、C++ 11/C++ 14はC99に基づいています。類似している:http://stackoverflow.com/q/37569204/560648 –

答えて

6

GCC(またはむしろglibc)は、strcpy_s()とお友達をサポートしていません。あなたがそれらをサポートするライブラリを見つけることができる場所についてのいくつかのアイデアについては、こちらをご覧ください:Are there any free implementations of strcpy_s and/or TR24731-1?

+0

ありがとう、ジョン。私はちょうどそれを自分で実装し終わった。 – Jacko

3

strcpy_sと友人はまだC++の一部ではありません。 C++17にはそれらがあるようですが、今のところそれらを提供するのは実装次第です。 glibcはそうではないようです。

実際、cppreferenceによれば、__STDC_WANT_LIB_EXT1____STDC_LIB_EXT1__が定義されている場合にのみ機能します。私のアーチLinuxではそうではありません。

#ifdef __STDC_LIB_EXT1__ 
constexpr bool can_have_strcpy_s = true; 
#else 
constexpr bool can_have_strcpy_s = false; 
#endif 

strncpyを使用できます。いくつかの注意を払って、それは安全です。

+1

Re: "どうしてstrncpyを使わないの?" - うん、うまくいかないから?はい、あなたはそれを動作させることができますが、 'strcpy'の"安全な "置き換えであるようには設計されておらず、そうではありません。 –

+0

@PeteBeckerは言い換えられます。今は受け入れられますか? – krzaq

関連する問題