Visual C++ 2005 で strcpy 等を


strcpy(s, "i");


のように書くと、コンパイル時に


「warning C4996: 'strcpy' が古い形式として宣言されました。」


という警告文が出ます。



これは、strcpy関数自体の書き方が古いわけではなく、VC++2005から以下のような、よりセキュアな書き方に変更されたためみたいです。


strcpy_s(s, sizeof(s), "i");



この変更はC言語標準の書き方ではないため、LinuxとかVC++2005以前のVCならコンパイルは通らないです。



でも、環境ごとに書き換えるのはメンドイので、


以下の文をヘッダーファイルの下辺りに書くことで対応できるみたいです。



#if _MSC_VER < 1400
#define strcpy_s(a, b, c) strcpy(a, c)
#define strcat_s(a, b, c) strcat(a, c)
#define strncpy_s(a, b, c, d) strncpy(a, c, d)
#define _strlwr_s(a, b) strlwr(a)
#define sprintf_s(a, b, c) sprintf(a, c)
#define scanf_s(a, b, c) scanf(a, b, c)
#define sprintf_s(a, b, c, d) sprintf(a, c, d)
#endif


1400 は VC++2005(VC++8.0)を示す値です。


とりあえず思いついたのをいくつか書いただけなので、足りないのもあるし、間違ってるかもしれませんが、


自分が忘れないためのメモとして、残しておきます。





なんか最近、マニアックなことばっか書いてる気が・・・ガーン