2017-06-26 15 views
0

strcpy_sここで定義したhttps://msdn.microsoft.com/en-us/library/td1esda9.aspx - (2つの引数を持つもの)strcpyをここで定義したhttp://en.cppreference.com/w/c/string/byte/strcpy - (最初のもの)と安全に置き換えることができるかどうかを知りたいと思います。そうでなければ、の最も近いバージョンはstrcpy 012を置き換えるために使用できるstrcpyですか?strcpyはstrcpy_sと等価です

+0

まあ 'strcpy_s'には、あなたがねじ込むことができる1つの追加パラメータが含まれています –

+0

あなたの目標は何ですか?あなたは確かにすることができますが、なぜそれが最初にそこにあったのかわからない場合、 'strcpy_s'を' strcpy'に置き換えてはなりません。 –

+0

できますか?はい。あなたは安全にそうすることができますか?さて、より安全な機能を安全性の低い機能に置き換えることを考えれば、私は「いいえ」と言います。 –

答えて

3

bounds-checked functionsには、strcpy_s()が追加されています。だから、移植性が心配ならば、C11準拠のコンパイラがあれば大丈夫です。 C11標準の「制約ハンドラ」は、Microsoft CRTの「無効なパラメータハンドラ」とわずかに異なりますので、カスタムハンドラをインストールする場合は、いくつかの調整が必要な場合があります。

これをすべて置き換えるには、明らかに理由があるため、strcpy()に置き換えることはできません。strcpy()は境界チェックされていません。 strlen()を使用して独自の境界チェックを行うか、strncpy(),を使用する必要がありますが、strncpy()の動作は異なるです(具体的には、送信元文字列が宛先に収まらない場合、宛先バッファはNULLで終了しません)。