几个常用的函数原型
strcpy函数原型
char *strcpy(char *strDest, const char *strSrc)
{
if (strDest == NULL || strSrc == NULL)
return NULL;
if (strDest == strSrc)
return strDest;
char *tempDest = strDest;
while((*strDest++ = *strSrc++) != '\0');
return tempDest;
}
这里有几个要点:
1、传进来的参数,为了保护原字符串不被修改,原字符串用 const 修饰
2、对源字符串和目的字符串加上非0断言,而且注意是NULL,并不是0或者bool,这里是C语言,0并不等 于NULL。
3、为了实现链式操作,将目的地址返回,且返回值类型为char *。
附:见到过的几个常用函数
/**************************************/
/********** isalnum() *********/
/**************************************/
int m_isalnum(char ch)
{
return ((ch<='9'&&ch>='0')
||(ch<='z'&&ch>='a')
||(ch<='Z'&&ch>='A'));
}
/**************************************/
/********** isalpha() *********/
/**************************************/
int m_isalpha(char ch)
{
return ((ch<='z'&&ch>='a')
||(ch<='Z'&&ch>='A'));
}
/**************************************/
/********** islower() *********/
/**************************************/
int m_islower(char ch)
{
return (ch<='z'&&ch>='a');
}
/**************************************/
/********** isupper() *********/
/**************************************/
int m_isupper(char ch)
{
return (ch<='Z'&&ch>='A');
}
/**************************************/
/********** isxdigit() *********/
/**************************************/
int m_isxdigit(char ch)
{
return (ch<='9'&&ch>='0');
}
/**************************************/
/********** tolower() *********/
/**************************************/
char m_tolower(char ch)
{
if(ch<='Z'&&ch>='A')
return (ch+'a'-'A');
return '0';
}
/**************************************/
/********** toupper() *********/
/**************************************/
char m_toupper(char ch)
{
if(ch<='z'&&ch>='a')
return (ch+'A'-'a');
return '0';
}
/**************************************/
/********** atoi() *********/
/**************************************/
int m_atoi(char *str)
{
char *s=str;
int sum=0, flag=1;
if(*s==NULL)
return 0;
while(*s==' ') /* skip space */
s++;
if(*s=='-')
{
flag=-1;
s++;
}
while(*s!='/0' && m_isxdigit(*s))
{
sum=*s-'0'+sum*10;
s++;
}
return flag*sum;
}
/**************************************/
/********** itoa() *********/
/**************************************/
void m_itoa(int n)
{
char *s=NULL;
int i, j, mod, flag=0;
char num[20];
if(n<0)
{
flag=1;
n=-n;
}
i=0;
do
{
mod=n%10;
n=n/10;
num[i++]=mod+'0';
} while (n>0);
if(flag) /* print '-' */
printf("-");
for(j=i-1; j>=0; j--) /* print reverse char */
{
printf("%c", num[j]);
}
}
/**************************************/
/********** atof() *********/
/**************************************/
float m_atof(char *str)
{
char *s=str;
if(*s=='/0')
return 0.0;
float sum=0.0;
int flag=1, pow=0;
if(*s=='-')
{
flag=-1;
s++;
}
while(*s!='/0')
{
if(*s=='.') /* dot */
{
pow=1;
s++;
continue;
}
sum=*s-'0'+sum*10;
pow*=10;
s++;
}
return flag*sum/pow;
}
/**************************************/
/********** ftoa() *********/
/**************************************/
void m_ftoa(float n)
{
char num[20];
int i, j, val, mod, flag, pow;
float dot;
if(n<-1e-6)
{
flag=1;
n=-n;
}
i=0;
val=(int)n; /* integer */
dot=n-val; /* decimal */
do
{
mod=val%10;
val=val/10;
num[i++]=mod+'0';
}while(val>0);
if(dot>1e-6)
{
num[i]='.';
pow=10;
}
do
{
dot=dot*pow;
mod=(int)dot;
num[i++]=mod+'0';
dot=dot-mod; /* error, why, float... help me */
} while (dot>1e-6);
if(flag)
printf("-");
for(j=i-1; j>=0; j--)
printf("%c", num[j]);
}