对于一些经典库函数的源代码认识以及分析1.

来源:互联网 发布:linux 发送icmp请求包 编辑:程序博客网 时间:2024/04/19 23:32


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 自动选择合适的表示法

今天眼睛太痛了,就写这么都 等下次写一个全面的。



0 0