概要
エラーパータン1
fopen()関数や、strcpy()関数、sprintf()関数などを使用すると、ビルド時にxxx_s()関数に変えてくれっていうエラーが表示されます。
ここでは、エラー解除方法を4つほど紹介します。
エラーパターン2
もうひとつのエラーパターン。xxx_s()関数に変えてくれっていうエラーじゃないほう。こちらも一緒に試してみたいと思います。
エラー解除方法
1つ目:_CRT_SECURE_NO_WARNINGS
メニュー[プロジェクト]-[プロパティ]を選択。
プロパティページ画面の、[構成プロパティ]-[C/C++]-[プリプロセッサの定義]で編集を選択
プリプロセッサの定義画面で、「_CRT_SECURE_NO_WARNINGS」を入力
ちなみにソース上に定義しても効果なし。
#define _CRT_SECURE_NO_WARNINGS // 効果なし
エラーパターン1は、解除できますが、エラーパターン2では解除できませんでした。
2つ目:SDLチェック
メニュー[プロジェクト]-[プロパティ]を選択。
プロパティページ画面の、[構成プロパティ]-[C/C++]-[全般]-[SDLチェック]の「はい(/sdl)」→「いいえ(/sdl-)」に変更
3つ目:ソース上で定義
ソースコード内に以下「エラー回避の定義」を追加。
#pragma warning(disable:4996)
4つ目:xxx_s()に置き換える
エラーメッセージ通り、xxx_s()に置き換える。
引数に最大サイズ指定が増えたぐらい。
メモリオーバーしないように使ってほしいからって事なんでしょうね。
ちなみにエラーパターン2のstricmp()の例の場合は、_stricmp()を推奨してました。こっちはサイズ指定は気にしないんですね・・・。
char a[10];
//sprintf(a, "test");
sprintf_s(a, 10, "test");
//strcpy(a, "test");
strcpy(a, 10, "test");
//stricmp("test1", "test2");
_stricmp("test1", "test2");
sprintf_s()やstrcpy_s()の引数に指定している「10」という数値は、aの配列数を指してます。_countof(a)とかでもOK。
最後に
試作や勉強目的であれば、1~3つ目の方法でよいと思います。
本番は4つ目がいいかも。
変な使い方しなければ、無理に_s()に置きかえなくても良さそうですけどね。
最後まで見てくれてありがとう。