天天看点

恶补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);       

继续阅读