C语言简单库函数的实现01 (string.h : strcpy\strcmp\strcat)

C语言简单库函数的实现01 (string.h : strcpy\strcmp\strcat)

 
 
 
   1: #include <stdio.h>
   2: #include <stdlib.h>
   3: #include <string.h>
   4: #include <assert.h>
   5:  
   6: //strcpy函数实现
   7: char*
   8: my_strcpy(dest,src)
   9: char* dest;
  10: const char* src;
  11: {
  12:     assert(dest!=NULL && src!=NULL);
  13:     char* const ret=dest;    //与返回类型无关,保护ret不被改变
  14:     while(*dest++=*src++);
  15:     return ret;
  16: }
  17:  
  18: //strcat函数的实现
  19: char*
  20: my_strcat(dest,src)
  21: char* dest;
  22: const char* src;
  23: {
  24:     assert(dest!=NULL && src!=NULL);
  25:     char* d=dest;
  26:     while(*d++);    //找到dest的结尾
  27:     d-=1;    //d指向'\0'的后一个
  28:     while(*d++=*src++);
  29:     return dest;
  30: }
  31:  
  32: //strcmp
  33: /*
  34: 功能:比较字符串str1 and str2, 返回值如下:
  35: 返回值 解释 
  36: less than 0        str1 is less than str2 
  37: equal to 0        str1 is equal to str2 
  38: greater than 0    str1 is greater than str2 
  39: */
  40: int
  41: my_strcmp(str1,str2)
  42: const char* str1;
  43: const char* str2;
  44: {
  45:     assert(str1!=NULL && str2!=NULL);
  46:     if(str1==str2)return 0;
  47:     int ret=0;
  48:     while(ret==0 && *str1){    //两字符串不等长,最后ret不为0
  49:         ret= *str1++ - *str2++;
  50:     }
  51:     if(!ret)ret=-*str2;
  52:     //str1指向'\0'的时候,str2没有指向'\0',而前部都相同,ret==0
  53:  
  54:     return ret;
  55: }
  56:  
  57:  
  58:  
  59: int main()
  60: {
  61:     const char* p="name std strcpy";
  62:     char dest[100]={"说中文123"};
  63:     my_strcat(dest,p);
  64:     printf("%s\n",dest);
  65:     printf("%d\n",my_strcmp("1234546","12345"));
  66:     return 0;
  67: }

你可能感兴趣的:(C语言简单库函数的实现01 (string.h : strcpy\strcmp\strcat))