//
memcpy vs strcpy
01 应用场景: memcpy 任何类型 & strcpy 字符串
02 结束标志: memcpy 第三个参数 & strcpy 字符串结束符 '\0'( '\0'也会被拷贝 )
03 安全性: 由于 strcpy 结束点未知 容易导致溢出
考虑安全性推荐使用 memcpy 或 strcpy 改进版 strncpy
04 效率: 在拷贝相同字节数时 ( 含'\0' ) strcpy 快于 memcpy
原因或许在于 类型转换的时间消耗
size_t ----- wchar_t ----- ptrdiff_t
//
// char a[],b[];
// memcpy( a,b,strlen(b) ) 不含 '\0'
// memcpy( a,b,sizeof(b) ) 含 '\0'
void* memcpy( void* a,const void* b,size_t size ) // const
{
if( ( a==NULL ) || ( b==NULL ) ) return NULL; // 判空
char *ans=a;
char *temp=b;
while( size-->0 ) *ans++ = *temp++;
return a; // return
}
// 若拷贝字符串时未拷贝到 '\0' 注意补零
//
char* strcpy( char* str1,const char* str2 ) //
{
if( ( str1==NULL ) || ( str2==NULL ) ) return NULL;
char *ans=str1;
char *temp=str2;
// while( ( *ans++ = *temp++ )!='\0' );
while( *ans++ = *temp++ );
return str1; //
}