2016-04-19 7 views
1

私はclangをDebian 8システムで使用しています。私は標準のC++ヘッダーを持っています。しかも、strcpy_sを定義するヘッダーはありません。どうしてこれなの?システムのどこにstrcpy_sが存在しないのですか?

# grep -iRHI 'strcpy_s' /usr 2>/dev/null 
/usr/include/x86_64-linux-gnu/bits/string2.h:    ? __strcpy_small (dest, __strcpy_args (src),    \ 
/usr/include/x86_64-linux-gnu/bits/string2.h:__STRING_INLINE char *__strcpy_small (char *, __uint16_t, __uint16_t, 
/usr/include/x86_64-linux-gnu/bits/string2.h:__strcpy_small (char *__dest, 
/usr/include/x86_64-linux-gnu/bits/string2.h:__STRING_INLINE char *__strcpy_small (char *, __STRING2_COPY_ARR2, 
/usr/include/x86_64-linux-gnu/bits/string2.h:__strcpy_small (char *__dest, 
/usr/src/broadcom-sta-6.30.223.248/src/include/bcmutils.h:#define bcm_strcpy_s(dst, noOfElements, src)   strcpy((dst), (src)) 

答えて

0

明らかにこれらは存在しないため存在しません。そして、私はそれらを見つけてインストールすることによってそれらを見つけてインストールできます。あるいは、それらを自分でコーディングすることによって、どうやらこれは参考になる解決策なので、アップフォースが始まるようにしてください。

+1

私はupvoted。これをstrcpy_sテンプレートが必要なものに置き換えてください。インラインint strcpy_s(C * d、unsigned long dmax、const C * s){if(dmax <= 1 ||!d){if(!d ||!dmax)return C * = d + dmax-1;(d!= de ||(* d = C(0)))&&(* d = * s ); ++ d、++ s); return 0;} ' –

+0

ありがとうございます。しかし、私はまだすべての他の機能が欠けている:( –

5

strcpy_sは、C++標準ライブラリでは提供されていません。

strcpy_sは、C11以降のC標準規格で指定されています。しかし、C11でも、strcpy_sはオプションです。すべての標準ライブラリ実装は、すべてのオプション機能を提供するわけではありません。だから答えは次のように思えます:あなたがインストールしたC標準ライブラリのどれもそれを宣言していないので。

私のシステムにstrcpy_s、strtok_s、およびその他すべての安全な文字列関数を与える方法は?

これらをすべて実装するライブラリを見つけるか、自分で実装する必要があります。

+0

これは参考にならない回答です。 strcpy_s、strtok_s、その他すべての安全な文字列関数を私のシステムに与えるには? –

+1

@SodAlmightyどうしてそう思うのですか?私の意見では、これはあなたが 'strcpy_s'を定義するヘッダーを持っていない理由を疑問に思う人には非常に役に立ちます。私はあなたの新しい質問にも答えました。 – user2079303

+0

ああ。だから、それらを見つけて入手するために、私はそれらを見つけて入手しなければならない。右。これはうまくいきません!!!これは無回答です。なぜ人々はそれを上回っているのですか? –

関連する問題