几个常用C语言函数的分析

本文为读书笔记整理而来

 

1、内存复制函数

memcpy( void *pvTo , void *pvFrom , size_t size )

{

byte *pbTo   = ( byte * )pvTo ;

byte *pbFrom = ( byte * )pvFrom ;

 

assert ( pvTo != NULL && pvFrom != NULL ) ;

while ( size-- > 0 )

    *pbTo++ = *pbFrom++ ;

return ( pvTo ) ;

}

分析:

assert是一个调试用的宏,在ANSIassert.h中定义的。

 

复制一个不重叠的内存

memcpy( void *pvTo , void *pvFrom , size_t size )

{

byte *pbTo   = ( byte * )pvTo ;

byte *pbFrom = ( byte * )pvFrom ;

 

assert ( pvTo != NULL && pvFrom != NULL ) ;

assert ( pvTo >= pvFrom + size || pvFrom >= pvTo + size ) ;

while ( size-- > 0 )

    *pbTo++ = *pbFrom++ ;

return ( pvTo ) ;

}

 

2、字符串复制函数

Char * strcpy (char *strDest , const char *strSrc)

{

Char *address = strDest;

assert ( strDest != NULL && strSrc != NULL ) ;

while ( ( *strDest++ = *strSrc++ ) != ‘\0’ );

return address;

}

 

3、字符串比较

int strcmp ( const unsigned char * strLeft , const unsigned char * strRight )

{

assert (strLeft!= NULL && strRight!= NULL ) ;

for ( ; *strLeft == *strRight ; strLeft++ , strRight++ )

{

    If ( *strLeft == ‘\0’ )                 //字符串相等

        Return 0 ;

}

Return ( ( *strLeft < *strRight ) ? -1 : 1 ) ;   //字符串不相等

}

分析,int strcmp ( const char * strLeft , const char * strRight ),当strLeftstrRightchar类型指针时,可移植性就不好,因为有的操作会使用符号位。

 

4、把一个有符号数转换成字符串

void UnsToStr ( unsigned u , char *str )

{

char strDigits[6] ;         //工作内存

char *pch ;

 

assert( u <= 65535 )       //检查无符号整形的位数

pch = &strDigits[5] ;       //从后往前存入字符

*pch = ‘\0’ ;

do

    *-- pch = ( u % 10 ) + ‘0’ ;

while ( ( u /= 10 ) > 0 ) ;

strcpy ( str , pch ) ;

}

分析:不使用输出内存作为工作内存,因为你不知道str指向的内存有多大,所以最好不要用输出内存str作为工作内存,除非str明确定义了内存 

                                           

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值