程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> strcpy, strcmp, strlen, memcpy 實現

strcpy, strcmp, strlen, memcpy 實現

編輯:C++入門知識

[cpp]
#include <assert.h> 
#include <string.h> 
#include <stdlib.h> 
#include <stdio.h> 
 
char *StrCpy(char *dest, const char *src) 

     assert((dest != NULL) && (src != NULL)); 
     char *str = dest; 
     while ((*dest ++ = *src ++) != '\0'); 
     return str; 

 
int Strlen(const char *str) 

     assert((str != NULL)); 
     int len = 0; 
     while (*str ++) 
     { 
          len++; 
     } 
     return len; 

 
int StrCmp(const char *str1, const char *str2) 

     assert((str1 != NULL) && (str2 != NULL)); 
     int rt = 0; 
     while ( !(rt = *(unsigned char *)str1 - *(unsigned char*)str2 ) &&  *str2) 
     { 
         str1 ++;  
         str2 ++; 
     } 
     if (rt > 0)  
     { 
         rt = 1; 
     } 
     else if (rt < 0) 
     { 
         rt = -1; 
     } 
     return rt; 

 
//為了解決內存重疊的現象  
void *MemCpy(void *dst, const void *src, size_t count) 

     char *pdst = static_cast<char *>(dst); 
     const char *psrc = static_cast<const char *>(src); 
      
     if (pdst > psrc && pdst < psrc + count) 
     { 
           for (int i = count - 1; i >= 0; i--) 
           { 
                pdst[i] = psrc[i]; 
           } 
     }  
     else 
     { 
           for (int i = 0; i < count; i++) 
           { 
                pdst[i] = psrc[i]; 
           } 
     } 
     return dst; 
}  
 
// memcpy 實現源碼 
void * __cdecl memcpy ( 
        void * dst, 
        const void * src, 
        size_t count 
        ) 

        void * ret = dst; 
 
        while (count--) { 
                *(char *)dst = *(char *)src; 
                dst = (char *)dst + 1; 
                src = (char *)src + 1; 
        } 
 
        return(ret); 
}  
 
int main() 

     char  str2[100] = "abcd"; 
     char *str1 = (char *)malloc(100); 
     str1= str2 + 2;  
     //考慮了內存重疊  
     MemCpy(str1, str2, 5); 
     printf("調用MemCpy後str1的內容:     %s\n", str1); 
      
     //未考慮內存重疊  
     memcpy(str1, str2, 5); 
     printf("調用memcpy後str1的內容:     %s\n", str1); 
     while(1); 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved