一、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.