strcpy_s
strcpy_sというMicrosoftが推奨する安全なstrcpyというのがあるのですが、これが、
errno_t strcpy_s(char *strDestination, size_t sizeInBytes, const char *strSource);
というプロトタイプになっており、まぁ、sizeInBytesのおかげで安全に暮らせるのですが、実は
Security Enhancements in the CRT
に書いてある面白い機能があって、C++ならば、
#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1
というマクロを定義すると、
char szBuf[10]; strcpy(szBuf, "test");
というコードが、自動的に、
char szBuf[10]; strcpy(szBuf, sizeof(szBuf), "test");
相当のコードになるようです。まぁ、ただのテンプレートを使ったテクニックではありますが、目から鱗ではあります。
一応、MSDNには固定長の配列の話しか書いてありませんが、ポインタ以外であれば、vectorやstring、CStringにも応用できるテクニックではあります。