char * __cdecl strcat (
char * dst,
const char * src
)
{
char * cp = dst;
while( *cp )
cp++; /* find end of dst */
while( *cp++ = *src++ ) ; /* Copy src to end of dst */
return( dst ); /* return dst */
}
微软是如何保证,在函数里调用这个strcat() 来拼接字符串时,不越界访问的?因为在这个实现函数里,只是单纯的用一个指针遍历 dst 数组,并把 src 数组的内容复制到dst里,而不用考虑 dst 数组的容量是否够大!
如果我要复制的数组,比如数组 char src[1024*600],而 char dst[]="abc"; 那调用这个函数时,dst的容量只有4字节(包括结束符),而要复制的数组大小为 1024*600 字节。即使有可能 dst 和 src 是分配在栈中的一段连续内存里的,也许可以正常复制 src数组到 dst ,但这样复制完后,src[] 数组的内容岂不是被修改了?
很不解微软是如何解决这个问题的,还是根本就不需要解决。。。。。我多虑了?囧。。。。。。