我正在尝试通过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
答案 0 :(得分:1)
请勿使用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;
}
答案 1 :(得分:1)
我不确定这是否是您实际问题的一部分,但strcpy()并不安全,并且可能导致缓冲区溢出。顺便说一句,您的编译器不应仅因为这个原因而无法编译。.但是基于microsoft post:
“不推荐使用某些C运行时库函数,因为它们不安全且具有更安全的变体。不推荐使用某些C运行时库函数,因为它们已过时。”
希望获得帮助。
答案 2 :(得分:0)
较旧的字符串函数(安全性较低的版本)被标记为不推荐使用,新版本的后缀为_s(“安全”)(示例:strcpy_s)。
就您而言,
“ strcpy” 函数无法告诉您要复制的源字符串是否太大,无法容纳其目标缓冲区。
但是在安全的“ strcpy_s” 中,将缓冲区的大小作为参数,因此它可以确定是否会发生缓冲区溢出。
示例:
如果使用strcpy_s将11个字符复制到10个字符的缓冲区中,那是您的错误; strcpy_s无法纠正您的错误,但可以检测到错误并通过调用无效的参数处理程序来通知您。