
お世話になっております。
現在、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ランキング
-
指定した文字を削除したい
-
wstringの内容を表示させたい
-
C言語
-
C++/STLの動作
-
標準C++ iostream での printf ...
-
平均値を関数を用いて出力した...
-
MingwでC++のソースがコンパイ...
-
STLのwstring型から BSTR型 へ...
-
構文エラーが出ているのですが...
-
c++ ファイルからの複素数の読...
-
switch文のエラーについて
-
C言語からgnuplot呼び出し
-
boost::lexical_castで16進数文...
-
このプログラミング誰か教えて...
-
VS2019でofstreamが未定義になる
-
#include "fstream.h"
-
コンパイルできません
-
C++でEXEを作成してCGI-BINで動...
-
「Aに対するBの割合」と「Aに対...
-
複数桁10進数の*桁目だけを抽出...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VC++で文字列から任意の文字を...
-
なぜ、C++の標準ヘッダをインク...
-
構文エラーが出ているのですが...
-
enumの値から定義名を文字列化...
-
JPEGやPNGが読めるLoadImage関数
-
std::map の const 修飾について
-
VS2019でofstreamが未定義になる
-
_tcscat がうまくいきません(V...
-
空ENTERの判別
-
構造体配列のvectorへの変換と...
-
switch文のエラーについて
-
std::wstringのメモリリークに...
-
#define中の#のエスケープ
-
C++でShowCursorを使いたい。
-
findnext();について
-
【C++】ヘッダ内でstringを格納...
-
#include "fstream.h"
-
CStringとString
-
#defineの使い方について
-
iostream インクルード時に発生...
おすすめ情報