原型:extern void *memcpy(void *dest, void *src, unsigned int count);
功能:由src所指内存区域复制count个字节到dest所指内存区域。
说明:src和dest所指内存区域不能重叠,函数返回指向dest的指针。
typedef unsigned char BYTE;
void* memcpy(void* pDest, const void* pSrc, unsigned int size) {
assert(pDest != NULL && pSrc != NULL);
BYTE* pTmpD = (BYTE*) pDest;
const BYTE* pTmpS = (BYTE*) pSrc;
//要考虑内存区域重叠
//dst<src 前复制; dst>src 后复制
if(pTmpD < pTmS){
while (size--) {
*pTmpD++ = *pTmpS++;
}
}else{
pTmpD += (size-1);
pTmpS += (size-1);
while(size--){
*pTmpD-- = *pTmpS--;
}
}
return pDest;
}
二、char *strcpy(char *strDest, const char *strSrc)字符串复制函数
char *strcpy(char *strDest, const char *strSrc);
{
assert((strDest!=NULL) && (strSrc !=NULL)); // 2分
char *address = strDest; // 2分
while( (*strDest++ = * strSrc++) != ‘\0’ ); // 2分
return address ; // 2分
}
const char *strSrc中的const是指字符串内容为const,而不是说strSrc是const的,如果要指定strSrc是const,应该写成 char * const strSrc 。 三、int Strcmp(char *str1, char *str2)字符串比较函数
int Strcmp(char *str1, char *str2)
{
int i=0;
int b=0;
while(str1[i]||str2[i])
{
if(str1[i]>str2[i])
{
b=1;break;
}
else if(str1[i]<str2[i])
{
b=-1;break;
}
i++;
}
return b;
}
当只要求判断是否相等时,可简化为:
int strcmp(char *source, char *dest)
{
while ( (*source != '\0') && (*source == *dest))
{
source++;
dest++;
}
return ( (*source) - (*dest) ) ? -1 : 0;
}
四、int strlen(const char* str)计算字符串长度
int strlen(const char* str)
{
assert(str != NULL);
int len = 0;
while (*str++!='\0')
len++;
return len;
}
五、void reverse(char *ch)字符串反转函数
void reverse_str(char *ch)
{
int len;
int i;
len = strlen(ch)-1;
char ctemp;
for(i = 0; i < len-i; i++)
{
ctemp = ch[i];
ch[i] = ch[len-i];
ch[len-i] = ctemp;
}
ch[len+1] = 0;
}
void reverse_str2(char *ch)
{
int len;
int i;
len = strlen(ch)-1;
for(i = 0; i < len-i; i++)
{
ch[i] = ch[i] ^ ch[len-i];
ch[len-i] = ch[len-i] ^ ch[i];
ch[i] = ch[i] ^ ch[len-i];
}
ch[len+1] = 0;
}