天天看點

惡補c語言之strlen的實作

     最近與同學交流c語言庫函數的實作,發現自己所學的不能靈活運用,于是乎我就開啟猛火力模式,先自己來實作下常見的庫函數。

strlen()函數說明

        傳回指定字元串長度,不包括結束字元'/0' 

實作原型:

 int mystrlen(const char *str)

{

          int n;

          while(*str++ != '\0')

              n++;

          return n;

 }

 // 以下函數為測試函數

void main()      

     int m;

     char a[100];

     printf("please input a string!\n");

     gets(a);

     m=mystrlen(a);

     printf("%d",m);

}

#include <stdio.h>   

#include <string.h>    

#include <stdarg.h>  

//////////////////////////////////////////////////////////////////////////

static char a[10] = {'0','x','0','0','0','0','0','0','0','0'}; 

char* int2hex_inchar(int num) 

int i=9; 

int yushu; 

while(num>0) 

yushu=num%16; 

if(yushu < 10)

a[i--]=yushu + 48;

else

a[i--]=yushu + 55; 

num=num/16; 

return a;

int my_print(char *strin, char *strout,... )    

if(strin == null)

   return -1;

    va_list arg_ptr;                   /* 定義儲存函數參數的結構 */        

    int para;                     /* 存放取出的字元串參數 */    

    int i;   

char *temp;

    va_start( arg_ptr, strout );    /* argp指向傳入的第一個可選參數,    msg是最後一個确定的參數 */

    while(*strin)

if(*strin!= '%')  

       {  

         putchar(*strin);

*strout = *strin;

         strin++;  

strout++;

       }  

  else

  {

para = va_arg( arg_ptr, int);

temp = int2hex_inchar(para);

for(i=0;i<10;i++)

putchar(*temp);

*strout++ = *temp++ ;

//printf("%s ",int2hex_inchar(para));

strin=strin+2;

  }

*strout = '\0';

    va_end( arg_ptr );                                   /* 将arg_ptr置為null */    

    return 0;    

}  

void main( void )    

char strout[1024]; 

my_print("ni hao %z ni hao %z %z %z ",strout,50,40,70,80,90);

printf("\n in main the strout is : %s\n",strout);       

繼續閱讀