sscanf
函数原型:int sscanf(const char *buffer,const char *format,[argument]...);
参数列表: buffer:存储的数据;format:窗体空间字符串;argument:可选自变量;locale:要使用的区域设置
作用:读取格式化的字符串中的数据
返回值:返回成功转换并分配的字段数;返回值不包括已读取但未分配的字段;返回值为0表示没有分配任何字 段;返回值是EOF表示有错误或者在第一次转换之前到达字符串结尾。
使用示例:
1、一般用法:char buf[512]=; sscanf("123456","%s",buf); printf("%s\n",buf); 结果为:123456
2、取指定长度的字符串。如在下例中,取最大长度为4字节的字符串。sscanf("123456","%4s",buf); printf("%s\n",buf); 结果为:1234.
3、取到指定字符为止的字符串。如在下例中,取遇到空格为止字符串。sscanf("12345 abcd","%[^ ]",buf); printf("%s\n",buf); 结 果 为:123456
4、取仅包含指定字符集的字符串。如在下例中,取仅包含1到9和小写字母的字符串。 sscanf("123456abcdedfBC","%[1-9a- z]",buf); 结果为:123456abcdedf
5、取到指定字符集为止的字符串。如在下例中,取遇到大写字母为止得字符串。 sscanf("123456abcdefBC","%[^A-Z]",buf); printf("%s\n",buf); 结果为:123456ancdef
6、给定一个字符串iios/12DDWDFF@122,获取/和@之间的字符串,先将"iios/"过滤掉,再将非'@'的一串内容送到buf中, sscanf("iios/12DDWDFF@122","%*[^/]/%[^@]",buf); printf("%s\n",buf); 结果为:12DDWDFF
7、给定一个字符串"hello , world",仅保留"world".(注意:", "之后有一空格) sscanf("hello, world","%*s%s",buf); printf("%s\n",buf); 结果为:world 。ps:%*s表示第一个匹配到的%s被过滤掉,即Hello被过滤了,如果没有空格·则结果为 NULL.
集合操作:
%[a-z]表示匹配a到z中任何字符,贪婪性(尽可能多的匹配)
%[aB']匹配a,B,'中一员,贪婪性
%[^a]匹配非a的任何字符,并且停止·读入,贪婪性
小结:
sscanf的功能很类似于正则表达式,但却没有正则表达式强大,所以如果对于比较复杂的字符串处理,建议使用正则表 达式。
sprintf
sprintf指的是字符串格式化命令,主要功能是把格式化的数据写入某个字符串中,sprintf是个变参函数。使用sprintf对于写入buffer的字符数是没有限制的,这就存在了buffer溢出的可能性。
功能:把格式化电费数据写入某个字符串缓冲区。
原型:int sprintf(char *buffer,const char *format,[argument]...);
参数列表:buffer:char型指针,指向将要写入的字符串的缓冲区;format:格式化字符串;[argument]...:可选参数,可以是任何类型的数据。
返回值:返回写入Buffer电费字符数,出错则返回-1,如果buffer或format是空指针,且不出错而继续,函数将返回-1,并且errno会被设置为EINVAL
sprintf返回以format为格式argument为内容组成的结果被写入buffer的字节数,结束字符'\0'不计入内。即,如果"hello"被写入空间足够大的buffer后,函数sprintf返回5.同时buffer的内容将被改变。
fread
fread是一个函数,它从文件流中读数据,最多读取count个项,每个项size个字节,如果调用成功返回实际读取到的项个数(小于或等于count),如果不成功或读到文件结尾返回0
原型:size_t fread(void *buffer,size_t size,size_t count,File * stream);
参数列表:buffer:用于接收数据的内存地址;size:要读的每个数据项的字节数,单位是字节;count:要读count个数据项,每个数据项size个字节;stream:输入流。
返回值:返回真实读取的项数,若大于count则意味着产生了错误。另外,产生错误后,文件位置指示器是无法确定的。若其他stream或buffer为空指针,或在unicode模式中写入的字节数为奇数,此函数设置errno为ERRNO以及返回0.
ffwrite
fwrite()是c语言标准库中的一个文件处理函数,功能是向指定的文件中写入若干数据块,如果成功执行则返回实际写入的数据块数目。该函数以二进制形式对文件进行操作,不局限于文件文件。
功能:c语言函数,向文件写入一个数据块
原型:size_t fwrite(const void buffer,size_t size,size_t count,FILE * stream);
参数列表:buffer:是一个指针,对fwrite来说,是要获取数据的地址;size:要写入内容的一个数据项的字节数;count:要进入写入size字节的数据项的个数;stream:目标文件指针;
返回值:返回实际写入的数据项个数count..
说明:写入到文件的那里?这个与文件的打开模式有关,如果w+,则是从file pointer指向的地址开始写,替换掉之后的内容,文件的长度可以不变,stream的位置移动count个数;如果是a+,则从文件的末尾开始添加,文件长度加大。
fseek对此函数有作用,但是fwrite函数写到用户空间缓冲区,并未同步到文件中,所以修改后要将内存与文件同步可以用fflush(FILE* fp)函数同步·。