最近與同學交流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);