对于一些经典库函数的源代码认识以及分析1.
1.strcpy函数的实现#inlcudechar *strcpy(char *dst,const char *src){assert((dst!=NULL)&&(src!=NULL));char *tmp= dst;while((*dst++= *src++) != '0\'{}return tmp;}
1.strcpy函数的实现
#inlcude<assert.h>
char *strcpy(char *dst,const char *src)
{
assert((dst!=NULL)&&(src!=NULL)); // assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条 出错信息,然后通过调用 abort 来终止程序运行。请看下面的程序清单badptr.c:
char *tmp= dst;
while((*dst++= *src++) ; //这里如果dst=‘\0’ 那么det的ASCLL码值为0 所以执行完判断就结束了,但是这里赋值就在判断里,所以完整的拷贝下来;
return tmp;
}
这里的assert很重要以后会有专门的一个博客来写它。
2.strlen函数的实现
#include<assert.h>
char *strlen(const char *det)
{
int count=0;
while(*det++)
{
count++
}
return count;
}
3.%c %u......的用法
%d 十进制有符号整数
%md,m指定的是输出字段的宽度,如果数据的位数小于m,则左端补以空格,若大于m,则
按实际位数输出,如:
printf("%4d,%4d",a,b)
若a=123,d=12345,则输出的结果为:
空格123,12345
%ld输出长整形格式
%u 十进制无符号整数
注意这个%u是输出无符号的十进制数。也就是计算机只识别二进制编码的原码,进行编译。 (因为是无符号编译,然后只可能是正数,然后正数的原码反码补码都相等)
%f 浮点数
%s 字符串
%c 单个字符
%p 指针的值
%e 指数形式的浮点数
%x, %x 无符号以十六进制表示的整数
%0 无符号以八进制表示的整数
%g 自动选择合适的表示法
今天眼睛太痛了,就写这么都 等下次写一个全面的。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)