详解sscanf ,sprintf ,fread ,fwrite

一、sscanf()

sscanf()-从一个字符串中读进与指定格式相符的数据。

函数原型:

        int sscanf(string str, string fmt,mixed var1,mixed var2…);

       int scanf(const char* format,[,argument]...);

说明:

        sscanf与scanf类似。都是用于输入的,只是后者以屏幕(stdin)为输入源,前者以固定字符串为输入源。其中的format可以是一个或多个{%[*][width][{h|||164|L}]type|''|'\t'|'\n'|非%符号}

注:

1、*可用于格式中,(即%*d和%*s)加了星号(*)表示跳过此数据不读入。(也就是不把此数据读入参数中)

2、{a|b|c}表示a,b,c中选一,[d]表示可以有d也可以没有d。

3、width表示读取宽度。

4、{h| I |164|L}:参数的size,通常h表示单字节size,I表示2字节size,L表示4字节size(double例外),164表示8字节size。

5、type:这就很多了,就是%s,%d之类。

6、特别的:%*[width][{h|I|164|L}]type表示满足该条件的被过滤掉,不会向目的参数中写入值支持集合操作:

%[a-z]表示匹配a到z中任意 字符,贪婪性(尽可能多的匹配)

%[aB']匹配a、B、’中一员,贪婪性

%[^a]匹配非a的任意字符,贪婪性

例如:

1、取指定长度的字符。

           sscanf("123456","%4s",buf);

            printf("%s\n",buf);

            结果是:1234

2、取到指定字符为止的字符串。

               sscanf("123456 abcdef","%[^ ]",buf);

                printf("%s\n",buf)

                结果是:123456

3、取仅包含指定字符集的字符串。

            sscanf("123456abcdefBCDEF","%[1-9a-z]",buf);

            printf("%s\n",buf);

            结果是:123456abcdef

4、取到指定字符为止的字符串。

            sscanf("123456abcdefBCDEF","%[^A-Z]",buf);

            printf("%s\n",buf);

            结果是:123456abcdef

5、给定字符串“hello, world”,仅保留world。(注意:”,“之后有一个空格)

            sscanf(”hello, world“,"%*s%s\n”,buf);

            printf("%s\n",buf);

            结果是:world

注:%*s表示第一个匹配到的%s被过滤掉,即hello被过滤到,如果没有空格则结果为NULL。sccanf的功能很类似与正则表达式,但却没有正则表达式强大,所以如果对于比较复杂的字符串处理,建议使用正则表达式。

(注:sscanf表示从字符串中格式化输入)

二、sprintf

函数功能:

        把格式化的数据写入,某个字符串。

函数原型:

        int sprintf(zhar* buffer,const char* format[,argument]...);

返回值:

        字符串长度(strlen)。

例如:

        char* who = "I";

        char* whom = "CSDN";

        //产生:”I love CSDN“这字符串写到s中

        sprintf(s,"%s love %s",who,whom);

        sprintf(s,"%10.3f",3.1415926);//产生:"3.142"

三、fwrite

fwrite()是C语言标准库中的一个文件处理函数,功能是向指定的文件中写入若干数据块,如成功执行返回实践写入的数据块数目。该函数以二进制形式对文件进行操作,不局限于文本文件。

功能:

        C语言函数,向文件写入一个数据块。

用法:

        site_t fwrite(const void* buffer,size_t size,size_t count,FILE* stream);

        返回值:返回实际写入的数据块数目

        (1)buffer是一个指针,对write来说,是要获取数据的地址;

        (2)size要写入内容的字节数

        (3)count要进行写入size字节的数据项的个数。

        (4)stream目标文件指针;

        (5)返回实践写入的数据项个数count

四、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模式中写入的字节数为奇数,此函数设置error为EINAL以及返回0.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值