本文为读书笔记整理而来
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是一个调试用的宏,在ANSI的assert.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 ),当strLeft和strRight为char类型指针时,可移植性就不好,因为有的操作会使用符号位。
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明确定义了内存 。