(1)atof
原型:
floatatof(void*string);
功能:
将浮点数格式的字符串转换为浮点数。
如果string的第一个字符不能转换成数字,就停止处理。
参数:
格式为,[{+|-}]数字[。
数字][{e|E}[{+|—}]数字]。
如,—12。
345e+67
返回:
atof函数返回string的浮点值。
(2)atoi
原型:
intatoi(void*string);
功能:
atoi函数转换string为一个整数值。
string是一个字符序列,可以解释为一个整数。
如果string的第一个字符不能转换成数字,就停止处理。
参数:
atoi函数要求string有这样的格式:
[空格][{+|—}]数字,如"123456"。
返回:
atoi函数返回string的整数值。
(3)atol
原型:
longatol(void*string);
功能:
atol函数转换string为一个长整数值。
string是一个字符序列,可以解释为一个长整数。
如果string的第一个字符不能转换成数字,就停止处理。
参数:
atol函数要求string有这样的格式:
[空格][{+|-}]数字,如”1234567890"。
返回:
atol函数返回string的长整数值.
(4)rand
原型:
intrand(void);
功能:
rand函数产生一个0~32767之间的虚拟随机数。
返回:
rand函数返回一个虚拟随机数。
(5)srand
原型:
voidsrand(intseed);
功能:
srand函数设置rand函数所用的虚拟随机数发生器的起始值seed,随机数发生器对任何确定值seed产生相同的虚拟随机数序列。
返回:
无。
(6)strtod
原型:
unsignedlongstrtod(constchar*string,char**ptr);
功能:
strtod函数将一个浮点数格式的字符串string转换为一个浮点数.字符串开头的空白字符被忽略.
参数:
要求string有下面的格式:
[{+|—}]digits[.digits][{e|E}[{+|—}]digits]digits可能是一个或多个十进制数。
ptr的值设置指针到string中转换部分的第一个字符。
如果ptr是NULL,没有值和ptr关联。
如果不能转换,则prt就设为string的值,strtod返回0。
返回:
strtod函数返回由string生成的浮点数。
(7)strtol
原型:
longstrtol(constchar*string,char**ptr,unsignedcharbase);
功能:
strtol函数将一个数字字串string转换为一个long值。
参数:
输入string是一个字符序列,可以解释为一个整数。
字符串开头的空白字符被忽略,符号可选。
要求string有下面的格式:
[whitespace][{+|—}]digitsdigits可能是一个或多个十进制数。
如果base是零,数值应该有一个十进制常数、八进制常数或十六进制常数的格式。
数值的基数从格式推出。
如果base在2~36之间,数值必须是一个字母或数字的非零序列,表示指定基数的一个整数。
字母a~z(或A~Z)分别表示值10~36。
只有小于base的字母表示的值是允许的。
如果base是16,数值可能以0x或0X开头,0x或0x被忽略。
prt的值设置指针指向string中转换部分的第一个字符。
如果prt是NULL,没有值和ptr关联。
如果不能转换,prt设置为string的值,strtol返回0.
返回:
strtol函数返回string生成的整数值。
如溢出则返回LONG_MIN或LONG_MAX.
(8)strtoul
原型:
unsignedlongstrtoul(constchar*string,char**ptr,unsignedcharbase);
功能:
strtoul函数转换string为一个unsignedlong值。
参数:
与strtol函数类似.
返回:
strtoul函数返回string生成的整数值.如溢出则返回ULONG_MAX。
(9)init_mempool
原型:
voidinti_mempool(voidxdata*p,unsignedintsize);
功能:
init_mempool函数初始化存储管理程序,提供存储池的开始地址和大小。
本函数必须在任何其他的存储管理函数(calloc,free,malloc,realloc)被调用前设置存储池,只在程序的开头调用一次。
可以修改源程序以适合硬件环境.
参数:
p参数指向一个xdata的存储区,用calloc,free,malloc和realloc库函数管理。
size参数指定存储池所用的字节数。
返回:
无。
(10)malloc
原型:
voidxdata*malloc(unsignedintsize);
功能:
malloc函数从存储池分配size字节的存储块。
返回:
malloc返回一个指向所分配的存储块的指针,如果没有足够的空间,则返回一个NULL指针。
(11)free
原型:
voidfree(voidxdata*p);
功能:
free函数返回一个存储块到存储池。
p参数指向用calloc、malloc或realloc函数分配的存储块.一旦块返回到存储就可被再分配。
如果p是一个NULL指针,被忽略.本程序的源代码在\KEIL\C51\LIB目录中,可以修改源程序,根据硬件来定制本程序。
参数:
返回:
无.
(12)realloc
原型:
voidxdata*realloc(voidxdata*p,unsignedintsize);
功能:
realloc函数改变已分配的存储块的大小。
本程序的源代码在目录KEIL\C5I\LIB中,可以根据硬件环境定制本函数。
参数:
P参数指向己分配块,size参数指定新块的大小。
原块的内容复制到新块,新块中的任何其他区,如果是一个更大的块不初始化。
返回:
realloc返回一个指向新块的指针.如果存储池没有足够的存储区,返回一个NULL指针,存储块不受影响。
(13)calloc
原型:
voidxdata*calloc(unsignedintnum,unsignedintlen);
功能:
calloc函数从一个数组分配num个元素的存储区。
每个元素占用len字节,并清0.字节总数为num*len。
在LIB目录提供程序的源代码。
可以修改源程序,为硬件定制本函数.
参数:
num为元素数目,len为每个元素的长度。
返回:
calloc函数返回一个指针,指向分配的存储区,如果不能分配,则返回一个NULL指针。
四、流输入输出〈stdio。
h>
(1)_getkey
原型:
char_getkey(void);
功能:
_getkey函数等待从串口接收字符。
_getkey和putchar函数的源代码可以修改,提供针对硬件的字符级的I/O。
返回:
接收到的字符
(2)getchar
原型:
chargetchar(void);
功能:
getchar函数用_getkey函数从输入流读一个字符。
所读的字符用putchar函数显示.本函数基于_getkey或putchar函数的操作。
这些函数,在标准库中提供,用8051的串口读和写字符。
定制函数可以用别的I/O设备。
返回:
所读的字符。
(3)ungetchar
原型:
charungetchar(charc);
功能:
ungetchar函数把字符c放回到输入流。
子程序被getchar和别的返回c的流输入函数调用。
getchar在调用时只能传递一个字符给ungetehar。
参数:
返回:
如果成功,ungetchar函数返回字符c.如果调用者在读输入流时调用ungetchar多次,返回EOF表示一个错误条件.
(4)putchar
原型:
charputchr(charc);
功能:
putchar函数用8051的串口输出字符c。
本程序指定执行,功能可能有变。
因提供了_getkey和putchar函数的源程序,可以根据任何硬件环境修改以提供字符级的I/O.
参数:
返回:
putchar函数返回输出的字符c.
(5)printf
原型:
intprintf(constchar*fmtstr[,arguments]…);
功能:
printf函数格式化一系列的字符串和数值,生成一个字符串用putchar写到输出流。
参数:
fmtstr参数是一个格式化字符串,可能是字符、转义系列和格式标识符。
普通的字符和转义系列按说明的顺序复制到流。
格式标识符通常以百分号(%)开头,要求在函数调用中包含附加的参数Arguments。
格式字符串从左向右读。
第一个格式标识符使用fmtstr后的第一个参数,用格式标识符转换和输出.第二个格式标识符访问fmtstr后的第二个参数.如果参数比格式标识符多,多出的参数被忽略.如果参数不够,结果是不可预料的。
格式标识符用下面的格式:
%[flags][width][。
precision][{b|B|l|L}]type格式标识符中的每个域可以是一个字符或数字type域是一个字符,指定参数是否解释为一个字符、字符串、数字或指针。
如下表所示:
可选的字符b或B和l和L可直接放在类型字符前,分别指定整数类型d、i、u、o、x和X的char或long版本.flags域是单个字符,用来对齐、输出和打印+/-号、空白、小数点、八进制和十六进制的前缀。
如下表所示:
width域是一个非负数字,指定显示的最小字符数。
如果输出值的字符数小于width,空白会加到左边或右边(当指定了一个标记)以达到最小的宽度。
如果width用一个’0'作前缀,则填充的是零而不是空白。
width域不会截短一个域。
如果输出值的长度超过指定宽度,则输出所有的字符.width域可能是星号(*),在这种情况下,参数列表的一个int参数提供宽度值。
如果参数使用的是unsignedchar,在星号标识符前指定一个’b’.precision域是非负数字,指定显示的字符数、小数位数或有效位.precison域可能使输出值切断或舍入.precision域可能是星号(*),在这种情况,参数列表的一个int参数提供宽度值。
如果参数使用的是unsignedchar,在星号标识符前指定一个’b’。
本函数指定执行基于putchar函数的操作。
本函数作为标准库提供,用805l的串口写字符,用别的I/O设备可以定制函数。
必须确保参数类型和指定的格式匹配。
可用类型映射确保正确的类型传递到printf。
可传递给printf的总的字节数受到8051的存储区的限制。
SMALL模式和COMPACT模式最多15字节,LARGE模式最多40字节。
返回:
printf函数返回实际写到输出流的字符数。
(6)sprintf
原型:
intsprintf(char*buffer,constchar*fmtstr[,arguments]…);
功能:
sprintf函数格式化一系列的字符串和数值,并保存结果字符串在bufferfintstr。
参数:
参数是一个格式字符串,和printf函数指定的要求相同。
返回:
sprintf函数返回实际写到buffer的字符数.
(7)vprintf
原型:
voidvprintf(constchar*fmtstr,char*argptr);
功能:
vprintf函数格式化一系列字符串和数字值,并建立一个用puschar函数写到输出流的字符串,函数类似于printf的副本,但使用参数列表的指针,而不是一个参数列表。
本函数是指定执行的,基于putchar函数的操作.本函数作为标准库提供,用8051的串口写字符。
别的I/O设备可以定制函数。
参数:
fmtstr参数是一个指向一个格式字符串的指针,和printf函数的fmtstr参数有相同的形式和功能。
argptr参数指向一系列参数,根据格式中指定的对应格式转换和输出.
返回:
vprintf函数返回实际写到输出流的字符数。
(8)vsprimf
原型:
voidvsprintf(char*buffer,constchar*fmtstr,char*argptr);
功能:
vsprintf函数格式化一系列字符串和数字值,并保存字符串在Buffer中.函数类似于sprintf的副本,但使用参数列表的指针,而不是一个参数列表。
参数:
fmtstr参数是一个指向一个格式字符串的指针,和printf函数的fmtstr参数有相同的形式和功能。
argptr参数指向一系列参数,根据格式中指定的对应格式转换和输出。
返回:
vsprintf函数返回实际写到输出流的字符数.
(9)gets
原型:
char*gets(char*string,intlen);
功能:
gets函数调用getchar函数读一行字符到string.这行包括所有的字符和换行符('\n')。
在string中换行符被一个NULL字符(’\n’)替代。
len参数指定可读的最多字符数.如果长度超过len,gets函数用NULL字符终止string并返回.本函数指定执行基于_getkey或putchar函数的操作。
这些函数,在标准库中提供,用8051的串口读写。
对别的I/O设备可以定制。
参数:
string要读的字符串,len最多字符数.
返回:
gets函数返回string
(10)scanf
原型:
intscanf(sonstchar*fmtstr[,argument]…);
功能:
scanf函数用getchar程序读数据。
输入的数据保存在由argument根据格式字符串fmtstr指定的位置。
参数:
每个argument必须是一个指针,指向一个变量,对应fmtstr定义的类型,fmtstr控制解释输入的数据,fmtstr参数由一个或单个空白字符、非空白字符和下面定义的格式标识符组成。
·空白字符,空白(’’),制表(’\t’)或换行('\n'),使scanf跳过输入流中的空白字符。
格式字符串中的单个的空白字符匹配输入流的0或多个空白字符。
·非空白字符,除了百分号(’%'),使scanf从输入流读但不保存一个匹配字符。
如果输入流的下一个字符和指定的非空白字符不匹配,scanf函数终止.
·格式标识符以百分号(’%')开头,使scanf从输入流读字符,并转换字符到指定的类型值。
转换后的值保存在参数列表的argument中.百分号后面的字符不被认为是一个格式标识符,只作为一个普通字符.例如%%匹配输入流的一个百分号。
格式字符串从左向右读,不是格式标识符的字符必须和输入流的字符匹配。
这些字符从输入流读入,但不保存,如果输入流的一个字符和格式字符串冲突,scanf终止。
任何冲突的字符仍保留在输入流中。
在格式字符串中的第一个格式标识符引用fmtstr后面的第一个参数,并转化输入字符,用格式标识符保存值。
第二个格式标识符访问fmtstr后面的第二个