[英]C4496 and C6387 for using strcpy and strcat
我正在嘗試通過 strlen() 函數將函數中的 2 個字符串復制到新的動態內存中。
char* PairSortedArrays(char a[], char b[])
{
char* p1 = (char*)malloc(strlen(a) + strlen(b) + 1);
if(p1)
{
strcpy(p1, a);
strcat(p1, b);
}
return p1;
}
獲取編譯器錯誤:
Severity Code Description Project File Line Suppression State
Error C4996 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. check C:\Users\97254\source\repos\check\check\Source.c 35
不要使用 strcat,因為您擁有所有可用信息。
char *strdupcat(const char *str1, const char *str2)
{
size_t str1Len;
char *result = NULL;
if(str1 && str2)
{
result = malloc((str1Len = strlen(str1)) + strlen(str2) + 1);
if(result)
{
strcpy(result, str1);
strcpy(result + str1Len, str2)
}
}
return result;
}
我不確定這是您實際問題的一部分,但 strcpy() 不安全並且可能導致緩沖區溢出。 順便說一句,你的編譯器不應該因為這個而無法編譯......但基於微軟的帖子:
“ 一些 C 運行時庫函數已被棄用,因為它們不安全且具有更安全的變體。其他一些則被棄用,因為它們已過時。”
希望這有幫助。
較舊的字符串函數,安全性較低的版本被標記為已棄用,新版本具有 _s(“安全”)后綴(例如:strcpy_s)。
在你的情況下,
“strcpy”函數無法判斷您正在復制的源字符串對於其目標緩沖區是否太大。
但是在安全的"strcpy_s" 中,將緩沖區的大小作為參數,因此它可以確定是否會發生緩沖區溢出。
例子:
如果您使用 strcpy_s 將 11 個字符復制到 10 個字符的緩沖區中,那是您的錯誤; strcpy_s 無法糾正您的錯誤,但它可以檢測您的錯誤並通過調用無效參數處理程序通知您。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.