sscanf(),spritnf(),fread(),fwrite()

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)函数同步·。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值