以下函数比使用memcpy更安全吗? Memcpy在Checkmarx静态代码分析中给出以下“Improper_Null_Termination”错误:在行中的字符串被删除其终止空字节。但是,如果我使用以下函数,Checkmarx没有问题:
void myMemCpy(void *dest, void *src, size_t n)
{
// Typecast src and dest addresses to (char *)
char *csrc = (char *)src;
char *cdest = (char *)dest;
// Copy contents of src[] to dest[]
for (int i=0; i<n; i++)
cdest[i] = csrc[i];
}
使用此函数而不是memcpy()有什么问题吗?
以下函数比使用memcpy更安全吗?
不,它是一样的。最好。
如果有的话,由于代码分析器和编译器知道memcpy()
的作用,这段代码不太安全。
特别是考虑到你通过size_t
然后不正确地使用int
循环计数器的方式:
void myMemCpy(void *dest, void *src, size_t n)
{
// Typecast src and dest addresses to (char *)
char *csrc = (char *)src;
char *cdest = (char *)dest;
// Copy contents of src[] to dest[]
for (int i=0; i<n; i++)
cdest[i] = csrc[i];
}
在具有32位int
和64位size_t
的64位架构上,如果n
的值超过2 gig,那将会非常失败。