/*
f:\猫様\猫様\mein.cpp(275): warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
c:\program files\microsoft visual studio 10.0\vc\include\stdio.h(234) : 'fopen' の宣言を確認してください。
f:\猫様\猫様\mein.cpp(277): warning C4996: 'fscanf': This function or variable may be unsafe. Consider using fscanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
c:\program files\microsoft visual studio 10.0\vc\include\stdio.h(253) : 'fscanf' の宣言を確認してください。
f:\猫様\猫様\mein.cpp(292): warning C4996: 'fscanf': This function or variable may be unsafe. Consider using fscanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
c:\program files\microsoft visual studio 10.0\vc\include\stdio.h(253) : 'fscanf' の宣言を確認してください。
f:\猫様\猫様\mein.cpp(297): warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
c:\program files\microsoft visual studio 10.0\vc\include\stdio.h(234) : 'fopen' の宣言を確認してください。
f:\猫様\猫様\mein.cpp(300): warning C4996: 'fscanf': This function or variable may be unsafe. Consider using fscanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
c:\program files\microsoft visual studio 10.0\vc\include\stdio.h(253) : 'fscanf' の宣言を確認してください。
f:\猫様\猫様\mein.cpp(310): warning C4996: 'fscanf': This function or variable may be unsafe. Consider using fscanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
c:\program files\microsoft visual studio 10.0\vc\include\stdio.h(253) : 'fscanf' の宣言を確認してください。
f:\猫様\猫様\mein.cpp(366): warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
c:\program files\microsoft visual studio 10.0\vc\include\stdio.h(371) : 'sprintf' の宣言を確認してください。
f:\猫様\猫様\mein.cpp(369): warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
c:\program files\microsoft visual studio 10.0\vc\include\stdio.h(234) : 'fopen' の宣言を確認してください。
f:\猫様\猫様\mein.cpp(371): warning C4996: 'fscanf': This function or variable may be unsafe. Consider using fscanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online
help for details.
c:\program files\microsoft visual studio 10.0\vc\include\stdio.h(253) : 'fscanf' の宣言を確認してください。
f:\猫様\猫様\mein.cpp(377): warning C4996: 'fscanf': This function or variable may be unsafe. Consider using fscanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
c:\program files\microsoft visual studio 10.0\vc\include\stdio.h(253) : 'fscanf' の宣言を確認してください。
f:\猫様\猫様\mein.cpp(381): warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
c:\program files\microsoft visual studio 10.0\vc\include\stdio.h(234) : 'fopen' の宣言を確認してください。
f:\猫様\猫様\mein.cpp(384): warning C4996: 'fscanf': This function or variable may be unsafe. Consider using fscanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
c:\program files\microsoft visual studio 10.0\vc\include\stdio.h(253) : 'fscanf' の宣言を確認してください。
*/
とおそらく使っているすべてのファイル関係に警告が出ているようなのですが何が原因なのかわかりません。
(確認してみましたが難しくて…)
上が長くなってすいません…
こんな感じに使ってます(全部じゃないです)
FILE *fp;
/*画像*/
int map_img[gazou_max];
for(a=0;a<gazou_max;a++){
sprintf(buff,"パコネコゲーム用/map_img/床%d.bmp",a);
map_img[a]=LoadGraph(buff);
}
fp=fopen("パコネコゲーム用/map_データ/マップパラメーター.txt","r");
do{
fscanf(fp,"%d",&a);
if(a!=1000)
fscanf(fp,"%d %d %d %d",
&kakuninn[a][0],
&kakuninn[a][1],
&kakuninn[a][2],
&kakuninn[a][3]);
}while(a!=1000);
fclose(fp);
使い方に問題ありでしょうか?
警告について(fscanfとか)
Re:警告について(fscanfとか)
'fscanf': This function or variable may be unsafe. Consider using fscanf_s instead.
To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
→'fscanf': この関数もしくは変数は危険です。代わりにfscanf_sを使うことを検討してください。
警告を無効にするには、_CRT_SECURE_NO_WARNINGSを使用してください。詳細はオンラインヘルプを参照してください。
日本語にするとたぶんこんな感じです。
fscanfの使い方が悪いのではなく、その関数自体の危険性に警告が出されています。
標準関数は何かと危険を孕んでいることが多いので、
マイクロソフトは、自社が独自に開発した関数を使うことを推奨しています。
ですが、使い方が正しいのであれば、特に気にする必要はないと思います。
To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
→'fscanf': この関数もしくは変数は危険です。代わりにfscanf_sを使うことを検討してください。
警告を無効にするには、_CRT_SECURE_NO_WARNINGSを使用してください。詳細はオンラインヘルプを参照してください。
日本語にするとたぶんこんな感じです。
fscanfの使い方が悪いのではなく、その関数自体の危険性に警告が出されています。
標準関数は何かと危険を孕んでいることが多いので、
マイクロソフトは、自社が独自に開発した関数を使うことを推奨しています。
ですが、使い方が正しいのであれば、特に気にする必要はないと思います。
Re:警告について(fscanfとか)
警告は内容を理解していたら無視してもいいです
ファイルの先頭に
#define _CRT_SECURE_NO_WARNINGS
と書けば表示を抑制できます
ファイルが多ければプロジェクトのプロパティでプリプロセッサの定義に追加してもいいです
ファイルの先頭に
#define _CRT_SECURE_NO_WARNINGS
と書けば表示を抑制できます
ファイルが多ければプロジェクトのプロパティでプリプロセッサの定義に追加してもいいです
Re:警告について(fscanfとか)
なるほど!
皆さんありがとうございました。
今まで勉強していた時は危険を含んでいることを知りませんでした。
時間ができましたら、シエルさんの張っていただいた場所のものも使えるように勉強しておきます。
ところで、(ものによるでしょうけど)危険とはどういったものなのでしょうか?
今まで聞いたこともなかったのですが…(知りませんでした。)
ファイルが壊れてしまうなどでしょうか?
今後に生かすべく、勉強したいので
例だけでもいいので教えていただけないでしょうか?
皆さんありがとうございました。
今まで勉強していた時は危険を含んでいることを知りませんでした。
時間ができましたら、シエルさんの張っていただいた場所のものも使えるように勉強しておきます。
ところで、(ものによるでしょうけど)危険とはどういったものなのでしょうか?
今まで聞いたこともなかったのですが…(知りませんでした。)
ファイルが壊れてしまうなどでしょうか?
今後に生かすべく、勉強したいので
例だけでもいいので教えていただけないでしょうか?
Re:警告について(fscanfとか)
「国際標準規格の関数は糞なので、マイクロソフトが用意してあげたもっと優れた独自関数を使え」という警告ですね。
このアドバイスに従うと、わずかに安全性が向上することがある代わりに、関数は遅く、移植性のないものになります。
C1Xにも、似たような関数の仕様がありますが、微妙に異なるのでやはり互換性はありません。
得るものと失うものを比較して、どうするかを決めるとよいでしょう。
> ところで、(ものによるでしょうけど)危険とはどういったものなのでしょうか?
建前としてはメモリへの不正アクセスでしょうが、実際には他社の処理系に乗り換えられる危険があるということです。
ちなみ、fscanfをfscanf_sに変えたところで、元々危険ではない部分は間違いを犯しやすくなり、本当に危険な部分はそのままだったりします。
http://www.kijineko.co.jp/node/307
このアドバイスに従うと、わずかに安全性が向上することがある代わりに、関数は遅く、移植性のないものになります。
C1Xにも、似たような関数の仕様がありますが、微妙に異なるのでやはり互換性はありません。
得るものと失うものを比較して、どうするかを決めるとよいでしょう。
> ところで、(ものによるでしょうけど)危険とはどういったものなのでしょうか?
建前としてはメモリへの不正アクセスでしょうが、実際には他社の処理系に乗り換えられる危険があるということです。
ちなみ、fscanfをfscanf_sに変えたところで、元々危険ではない部分は間違いを犯しやすくなり、本当に危険な部分はそのままだったりします。
http://www.kijineko.co.jp/node/307
Re:警告について(fscanfとか)
FILE *fp;
char str[10];
fp = fopen( "test.txt", "r" );
fscanf( fp, "%s", str );
このようなコードで、
test.txtに10文字以上の文字が書かれていたら、
strに収まりきらなくなり、バッファオーバーフローを引き起こします。
それがその"危険"です。
(scanfやgetsなども同じ危険を孕んでいます)
まあ、ですが、
fscanf( fp, "%9s", str );
などとしていれば、バッファオーバーフローは起こりませんし、
(このコードが無問題というわけではないですが。
詳しくはたかぎさんのホームページに書かれていました
http://www.kijineko.co.jp/tech/supersti ... scanf.html)
使い方が間違っていなければ大丈夫です。
char str[10];
fp = fopen( "test.txt", "r" );
fscanf( fp, "%s", str );
このようなコードで、
test.txtに10文字以上の文字が書かれていたら、
strに収まりきらなくなり、バッファオーバーフローを引き起こします。
それがその"危険"です。
(scanfやgetsなども同じ危険を孕んでいます)
まあ、ですが、
fscanf( fp, "%9s", str );
などとしていれば、バッファオーバーフローは起こりませんし、
(このコードが無問題というわけではないですが。
詳しくはたかぎさんのホームページに書かれていました
http://www.kijineko.co.jp/tech/supersti ... scanf.html)
使い方が間違っていなければ大丈夫です。
Re:警告について(fscanfとか)
なるほど、
わかりやすい例ありがとうございました。
使えるようになっておいてもいいとは思いますが、あまり使う必要はなさそうですね。
つまらないミスしてもいやですし…
ありがとうございました。
わかりやすい例ありがとうございました。
使えるようになっておいてもいいとは思いますが、あまり使う必要はなさそうですね。
つまらないミスしてもいやですし…
ありがとうございました。