原型: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;
}