char * __cdecl strncpy (
char * dest,
const char * source,
size_t count
)
{
char *start = dest;
while (count && (*dest++ = *source++)) /* copy string */
count--;
if (count) /* pad out with zeroes */
while (--count)
*dest++ = '/0';
return(start);
}
这是strncpy的具体实现,如果nCount等于dest的内存大小,是不会补’/0’,这就需要注意两点:
1. 不会内存出错;
2. 字符串未正常结束。
Memcpy在2000下实际上调用了RtlMoveMemory,这个函数速度非常快,但是因为没有看到实现,不知道内存重叠会出现什么情况。在Source和Destination内存重叠的情况下。最好中间中转一下。从MSDN上的说明来看,这种担心是杞人忧天。
NTSYSAPI
VOID
NTAPI
RtlMoveMemory (
VOID UNALIGNED *Destination,
CONST VOID UNALIGNED *Source,
SIZE_T Length
);
这反映了一个函数编写的原则——尽量多的避免因为参数错误造成的影响,C++因为存在指针,这个地方尤为注意,比如野指针。