- ベストアンサー
C++, strcpy の warning.
VC2005 Express Edition を使ってます。 #include <iostream> #include <string> using namespace std; int main() { char str[10] = "hello"; strcpy(str, "HELLO"); } ↑ こちらをコンパイルすると hello.cpp .\hello.cpp(8) : warning C4996: 'strcpy' was declared deprecated C:\Program Files\Microsoft Visual Studio 8\VC\include\string.h(73) : see declaration of 'strcpy' という警告が出るのはどうしてでしょうか? #include <string.h> も試したのですが同じ警告でした。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
補足に質問があったのでお答えします。 > こういった情報はどこから入手できるのでしょうか? > 情報の海というか、こういうのは探すのが大変ですね。 > オススメのメーリングリストでもあれば教えて頂けると嬉しいです。 今回のことに関しては、日頃からプログラマの方々のblogを読んでいたり しますので、その方たちの経験談を覚えていたということです。 C++のメーリングリストということなら FreeML の cppllあたりでしょうか?
その他の回答 (4)
- Hardking
- ベストアンサー率45% (73/160)
これは、VC++2005でCRT関数にセキュリティ強化された関数が 追加された為です。 つまり、strcpy関数 -> strcpy_s関数にバージョンアップされたのです。 警告を解消するには、2通りあります。 (1)ソース上のstrcpyをstrcpy_sへ全置換する。 (2)ソースに下記define文を記述する. #define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1
お礼
#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1 を #include <iostream> の下につけた場合は同じ警告が出ましたが、 先頭につけるとうまく動作しました。 よく見ると出力ウィンドウに #define _CRT_SECURE_NO_DEPRECATE と書いてあり、そちらも先頭に付けると警告が消えました。 回答ありがとうございました!
- sakusaker7
- ベストアンサー率62% (800/1280)
参考になる情報を見つけました。 とりあえず件の警告は _CRT_SECURE_NO_DEPRECATE というシンボルを 定義することで抑止できるようです。 MSDN Chats: Secure Programming Enhancements in Visual C++ 2005 http://msdn.microsoft.com/chats/transcripts/vstudio/vstudio_070104.aspx CRT のセキュリティ強化 http://msdn2.microsoft.com/ja-jp/library/8ef0s5kh.aspx CRT 関数のセキュリティが強化されたバージョン (CRT) http://msdn2.microsoft.com/ja-jp/library/wd3wzwts.aspx
補足
回答ありがとうございます! 前は UNIX で書いてて strcpy を20個ほど使ってたのでとてもすっきりしました^^ こういった情報はどこから入手できるのでしょうか? 情報の海というか、こういうのは探すのが大変ですね。 オススメのメーリングリストでもあれば教えて頂けると嬉しいです。
- sakusaker7
- ベストアンサー率62% (800/1280)
strcpyなどはバッファオーバーランをしてしまう可能性があるので、使用を推奨されない(deprecated)ものになりました。 このため、警告がなされます。 何かのシンボルを定義して条件コンパイルすれば警告を抑止できたような 記憶がありますが正確なところは覚えていません。
- Trick--o--
- ベストアンサー率20% (413/2034)
char str[10] = "hello"; これが美味しくないかも。 定数になっちゃうんじゃないかな?
お礼
そのうち登録してみようと思います。 ありがとうございました!