Güvenli Şablon Aşırı Yüklemeleri
Birçok crt işlevleri edilerek daha yeni ve Gelişmiş güvenlik özelliklerine sahip sürümlerinde kaldırılmıştır (örneğin, strcpy_s daha güvenli gelmiştir strcpy).crt daha güvenli türevleri Geçiş Kolaylığı yardımcı olması için şablon yüklemelerini sağlar.
Örneğin, bu kod için bir uyarı oluşturur strcpy kaldırılmıştır:
char szBuf[10];
strcpy(szBuf, "test"); // warning: deprecated
Bu uyarıyı yoksayabilirsiniz.Sembol tanımlama _CRT_SECURE_NO_WARNINGS uyarıyı bastırmak veya kodu güncelleştirmek için strcpy_s:
char szBuf[10];
strcpy_s(szBuf, 10, "test"); // security-enhanced _s function
Şablon aşırı ek seçenekler sağlar.Tanımlama _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1'e daha güvenli türevleri otomatik olarak arama standart crt işlevlerin aşırı şablonu sağlar._CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES Kod herhangi bir değişiklik gerekli sonra 1 ' dir.Arka planda çağrısı strcpy çağrısı nedeniyle değişen strcpy_s otomatik olarak sağlanan size baðýmsýz deðiþkeni ile.
#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1
...
char szBuf[10];
strcpy(szBuf, "test"); // ==> strcpy_s(szBuf, 10, "test")
_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMESBir sayma gibi ele işlevlerini etkilemez strncpy.Count işlevler için şablon aşırı etkinleştirmek için tanımladığınız _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT 1.Bunu yapmadan önce ancak, kodunuzu (ortak bir hata) arabellek boyutu olan karakter sayısı geçtiğinden emin olun.İşlev çağrısı güvenli variant çağrılırsa gereksiz sonra açıkça null bir sonlandırıcı arabellek sonunda yazar da, kod.Kesme davranış gerekiyorsa, bkz: _TRUNCATE.
[!NOT]
Makro _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT gerektiren _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES de 1 tanımlanır._CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT 1 Tanımlanır ve _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES tanımlanan 0, uygulama herhangi bir şablon aşırı yükleme gerçekleştirmeye çalışmaz.
Tanımlama _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES 1 için şablon aşırı güvenli solucanının ("_s" içinde biten adları) sağlar.Bu durumda, _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES 1, özgün kod bir küçük değişiklik yapılması gerekir ise:
#define _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES 1
...
char szBuf[10];
strcpy_s(szBuf, "test"); // ==> strcpy_s(szBuf, 10, "test")
İşlevin adını ("_s" ekleyerek); değişmesi gerekli Şablon aşırı size baðýmsýz deðiþkeni sağlama dikkatli.
Varsayılan olarak, _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES ve _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT 0 (devre dışı) tanımlanır ve _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES 1 (etkin) tanımlanır.
Bu şablon yalnızca statik diziler çalışma overloads unutmayın.Dinamik olarak ayrılan arabelleklerin ek kaynak kod değişiklikleri gerektirir.Yukarıdaki örneklerde yeniden ziyaret etme:
#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1
...
char *szBuf = (char*)malloc(10);
strcpy(szBuf, "test"); // still deprecated; have to change to
// strcpy_s(szBuf, 10, "test");
Ve bu:
#define _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES 1
...
char *szBuf = (char*)malloc(10);
strcpy_s(szBuf, "test"); // doesn't compile; have to change to
// strcpy_s(szBuf, 10, "test");