文字列コピーstrcpyとmemcpy、および文字列比較関数strcmpを実現

1218 ワード

これらの関数は面接筆記試験に出やすいので、覚えておく必要がありますが、実は実現しやすいので、周到に考え、異常状況の判断に注意しなければなりません.
/*
*       
*      char*?(         , strlen(strcpy(p,q)       ))
*/
char* strcpy(char* strDest,const char* strSrc){
    if(strDest==NULL||strSrc==NULL)
        return NULL;
    char* strDestCopy=strDest;  //        
    while((*strDest++=*strSrc++)!='\0');
    return strDestCopy;
}

/*
*      
*/
#include 
void* memcpy(void* memTo,const void* memFrom,size_t size){
    assert((memTo!=NULL)&&(memFrom!=NULL)); //      
    char* tempTo=(char*)memTo;
    char* tempFrom=(char*)memFrom;
    while(size-->0){
        *tempTo++=*tempFrom++;
    }
    return memTo;
}

strcpyとmemcpyの違い:
(1)コピーされたコンテンツは異なり、strcpyは文字列しかコピーできないが、memcpyは任意のコンテンツをコピーできる.
(2)コピーの方法が異なり、strcpyは長さを指定する必要はありません.
(3)用途が異なり,文字列コピー時にstrcpyを用い,他のタイプのデータをコピーする場合にはmemcpyを用いるのが一般的である.
strcmp実装:
int strcmp(const char* src,const char* dst){
    assert((src!=NULL)&&(dst!=NULL));
    while(*src!='\0'&&*dst!='\0'&&*src++==*dst++);
    int ret=*src-*dst;
    if(ret>0) return 1;
    else if(ret==0) return 0;
    else return -1;
}