いつもお世話になっております。
さっそくですみませんが、標準関数のstrcpyを用いた多重継承のサンプルを実行したら、
以下のようなエラーメッセージが出ました。いちおう実行結果にも問題なく実行できましたが、
今後のことも考えて質問させていただきました。
どうかよろしくお願いしますm(_ _)m
【環境】Visual C++ 2008 Express Edition
========================================================================================
エラーメッセージ
========================================================================================
warning C4996: 'strcpy': This function or variable may be unsafe.
Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS.
See online help for details.
'strcpy' の宣言を確認してください。
========================================================================================
このようなメッセージがstrcpyの数だけ出ました。
========================================================================================
プログラム
========================================================================================
#include <iostream>
#include <string.h>
using namespace std;
class A
{
protected:
char str[64];
public:
A();
};
class B
{
protected:
char str[64];
public:
B();
};
class C : public A, public B
{
char str[64];
public:
C();
void show(void);
};
A::A()
{
strcpy(str, "classA\n");
}
B::B()
{
strcpy(str, "classB\n");
}
C::C()
{
strcpy(str, "classC\n");
}
void C::show()
{
cout << str;
cout << A::str;
cout << B::str;
return;
}
int main()
{
C test;
test.show();
return 0;
}
========================================================================================
preタグ、/preタグでプログラムを囲んだら、ものすごく空白と改行が増えました><
strcpy関数でのエラーについて
Re:strcpy関数でのエラーについて
> warning C4996: 'strcpy': This function or variable may be unsafe.
これはエラーメッセージではありません。単なる警告です。
これはエラーメッセージではありません。単なる警告です。
Re:strcpy関数でのエラーについて
さっそくの回答ありがとうございます^^
strcpy 警告 でググッてみたら解決策が出てきました。
VC++2005でCRT関数にセキュリティ強化された関数が追加された為。
つまり、strcpy関数 -> strcpy_s関数にバージョンアップされた。
解決方:
strcpyをstrcpy_sに置き換える
という認識でよろしいでしょうか?
お教えいただければ助かります。
strcpy 警告 でググッてみたら解決策が出てきました。
VC++2005でCRT関数にセキュリティ強化された関数が追加された為。
つまり、strcpy関数 -> strcpy_s関数にバージョンアップされた。
解決方:
strcpyをstrcpy_sに置き換える
という認識でよろしいでしょうか?
お教えいただければ助かります。
Re:strcpy関数でのエラーについて
strcpy_sを使えば互換性を捨てることになります。
また、strcpyをstrcpy_sに変えれば、無条件に安全になるわけでもありません。
この警告がうるさいので消したいだけであれば、特に理由がないかぎり、std::stringを使うようにしましょう。
そのほうがずっと簡単で安全になります。
また、strcpyをstrcpy_sに変えれば、無条件に安全になるわけでもありません。
この警告がうるさいので消したいだけであれば、特に理由がないかぎり、std::stringを使うようにしましょう。
そのほうがずっと簡単で安全になります。
Re:strcpy関数でのエラーについて
これはマイクロソフトが「その関数は危険なことになる可能性を秘めてるよ!うちで開発した関数の方が安全だから是非使ってね!」っていう宣伝ですから、普段出る警告とは意味合いが少し異なるかもしれませんね。
Re:strcpy関数でのエラーについて
回答ありがとうございます^^
このまま使っていたらどのようなエラーが起こりうるのか調べていましたが、
見当たりませんでした。
なので、すみませんがstd::stringを使っていたらどのような危険性があるか、
お教えしていただけないでしょうか?
よろしくお願いしますm(_ _)m
このまま使っていたらどのようなエラーが起こりうるのか調べていましたが、
見当たりませんでした。
なので、すみませんがstd::stringを使っていたらどのような危険性があるか、
お教えしていただけないでしょうか?
よろしくお願いしますm(_ _)m
Re:strcpy関数でのエラーについて
検索の単語を変えてもう一度調べなおしてみたら、
http://konuma.txt-nifty.com/blog/2006/0 ... _53c9.html
http://konuma.txt-nifty.com/blog/2005/1 ... _2411.html
のようなブログがあっさり見つかりました。
今後は自分でできるかぎり調べてから質問します。失礼しましたm(_ _)m
たかぎさん、ゆーずぃさん
回答ありがとうございました^^
http://konuma.txt-nifty.com/blog/2006/0 ... _53c9.html
http://konuma.txt-nifty.com/blog/2005/1 ... _2411.html
のようなブログがあっさり見つかりました。
今後は自分でできるかぎり調べてから質問します。失礼しましたm(_ _)m
たかぎさん、ゆーずぃさん
回答ありがとうございました^^
Re:strcpy関数でのエラーについて
警告メッセージの中にありますが、
ソースファイルの先頭に
#define _CRT_SECURE_NO_WARNINGS
と書いておくと警告を黙らせることができます。
ソースファイルの先頭に
#define _CRT_SECURE_NO_WARNINGS
と書いておくと警告を黙らせることができます。