![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
お世話になっております。
現在、Windows XP、VC++2005 にてプログラム中なのですが、
「strcpy()」についてです。
本ライブラリはセキュリティ強化のため「strcpy_s()」の使用を
奨励されていますが、箇所が多いので取り合えずWarningだけでも
取りたいと思っています。
--
#include "stdafx.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
charszBuf[10];
strcpy( szBuf, "test" );
return 0;
}
--
というサンプルコードに対して
warning C4996: 'strcpy' が古い形式として宣言されました。
'strcpy' の宣言を確認してください。
'This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_DEPRECATE. See online help for details.'
と出たので、ファイルの先頭に
#define_CRT_SECURE_NO_DEPRECATE
と加えたのですがWarningが取れません。
同様に
#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1
としても駄目でした。
他に何か必要なことはあるのでしょうか?
#pragmaは出来るだけ避けたいのですが。
以上、よろしくお願い致します。
No.3
- 回答日時:
#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1
を stdafx.hの stdio.hをインクリュードする前に定義してみてください
strcpyなどを strcpy_sとしてコンパイルしてくれますよ
この回答への補足
ありがとうございます。
最終的にはそのようにするつもりでしたが、どんな感じかな~
と試してる時にどうにもコンパイルが通らなかったので質問を
いたした次第でして・・・
それでもやっぱり ANo.2 と同様な疑問が起きます。
まあ、strcpy() でも strcpy_s() でも、バッファのチェックぐらい
コールの前にやってなきゃいけないのでしょうがね。
それに strcpy_s() に変えてエラーになっちゃったとしても、
現状ではどうにもならない作りになってますし。
No.2
- 回答日時:
#defineで置換してしまえばいいのでは ・・・
#define strcpy(x,y) strcpy_s((x),(y))
といった具合で
この回答への補足
追加で質問なのですが、その場合だと"x"のバッファサイズは
チェックされているのでしょうか?
例えば、質問で書いた記述ならsizeof()で10だと分かりますが、
new とかで領域を確保してそのアドレスを渡しちゃうとstrcpy_s()の中だけでは
"x"のサイズは分からないですよね?
ヘルプにも、動的に確保した時は手作業で修正してね、
みたいな記述がありましたが、やっぱりそうしないと駄目なんでしょうかね?
char szBuf[10];
strcpy( szBuf, "test" );
だろうが、
char *szBuf;
szBuf = new char[10];
strcpy( szBuf, "test" );
だろうが、中で行われる処理が同じなら機械的に置換してやれば
いいのですが・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- C言語・C++・C# C++初心者です stirng 2 2022/09/20 20:43
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# 並列プログラミングのπ計算について 1 2022/07/16 22:30
- その他(プログラミング・Web制作) 十進BASICでの再帰についての質問です。 2 2022/11/18 09:17
- C言語・C++・C# C言語のファイル入力が分かりません 2 2022/05/22 06:35
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VC++で文字列から任意の文字を...
-
指定した文字を削除したい
-
#include "fstream.h"
-
C++での <iostream.h>と<iostre...
-
std::wstringのメモリリークに...
-
Cの関数からC++の関数(DLL)を...
-
構造体配列のvectorへの変換と...
-
VHDLのsignedとunsignedの違いは?
-
C++で、テキストファイルを一行...
-
メインプログラムに#include <a...
-
VxWorks 6.4ソケット接続につい...
-
getlineについて
-
string型のフォーマット書式指...
-
clock関数のコンパイルエラーで
-
#defineの使い方について
-
C言語 MACアドレス
-
C++のifstreamの使い方
-
構文エラーが出ているのですが...
-
振分の問題
-
ヘッダーファイルがインクルー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
switch文のエラーについて
-
構文エラーが出ているのですが...
-
VC++で文字列から任意の文字を...
-
enumの値から定義名を文字列化...
-
空ENTERの判別
-
C++でShowCursorを使いたい。
-
#define中の#のエスケープ
-
なぜ、C++の標準ヘッダをインク...
-
C++で、テキストファイルを一行...
-
C言語のエラーを修正したい
-
gccでコンパイル時のエラー
-
C言語のポインターで詰まっている
-
#include "fstream.h"
-
リモートデスクトップの接続元I...
-
構造体配列のvectorへの変換と...
-
JPEGやPNGが読めるLoadImage関数
-
VS2019でofstreamが未定義になる
-
構造体に決められた文字列を入...
-
VHDLのsignedとunsignedの違いは?
-
std::wstringのメモリリークに...
おすすめ情報