strcpy和memcpy都是标准c库函数,它们的特点:
strcpy提供了字符串的复制,strcpy只用于字符串的复制,不仅复制字符串内容外,还会复制字符串的结束符。
strcpy的函数原型是: char* strcpy(char* dest, const char* src);
memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝n个字符到目标dest所指的
内存地址的起始位置。
memcpy只提供一般的内存复制,即memcpy对于需要复制的内容没有限制,因此用途更广。
函数原型是:void *memcpy(void *dest,const char* src, size_t count);
strcpy和memcpy主要有以下三点区别:
1.复制的内容不同,strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符串,整型,结构体,类等。
2.复制的方法不同。strcpy不需要指定长度,它遇到被复制字符串的结束符'\0'才结束,所以容易溢出。
memcpy则是根据第三个参数决定复制的长度。
3.用途不同,通常在复制字符串时使用strcpy,而复制其他类型的数据是memcpy。
memcpy和memmove都是C语言中的库函数,在库函数string.h中,其原型很相似,它们都是从src所指向的
内存中复制cnt个字符到dest所指向的内存中,并返回dest的值。
当源内存区域和目标内存区域无交叉重叠时,两者的结果是一样的,但是如果有交叉呢?
memcpy是从src的起始部分开始复制,所以虽然第一种情况下没有问题,但是如果遇到第二种情况,
则会发生错误,交叉部分的src内容就会被覆盖掉了。
而memmove则由于采用不同的复制机制,所以可以正确处理第二种情况。
assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行。