0
点赞
收藏
分享

微信扫一扫

memcpy vs strcpy

钟罗敏 2022-01-28 阅读 113
知识图谱
//
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;     // 
}

举报

相关推荐

0 条评论