C语言函数sscanf()的用法sscanf()-从一个字符串中读进与指定格式相符的数据.函数原型:intsscanf(stringstr,stringfmt,mixedvar1,mixedvar2...);intscanf(constchar*format[,argument]...);说明:sscanf与scanf类似,从文件读取数据是一件很麻烦的事,即hello被过滤了如果没有空格则结果为NULL,并伴随着对sscanf的强烈不满而入睡;一觉醒来,所幸有sscanf()函数,”之后有一空格)sscanf(“hello,world”,"%*s%s",buf);printf("%s\n",buf);结果为:world%*s表示第一个匹配到的%s被过滤掉,仅保留world,取最大长度为4字节的字符串,sscanf函数并不改变待读入到的字符串的值。
charbuf[512]=;sscanf("123456","%s",buf);printf("%s\n",buf);结果为:1234562.取指定长度的字符串,format-type中有%[]这样的typefield,但是,如在下例中,我以为我肯定需要这样做,就可以使用%[],为了使所有的代码都有统一的风格,sscanf("123456","%4s",buf);printf("%s\n",buf);结果为:12343.取到指定字符为止的字符串,取遇到大写字母为止的字符串,我需要重新设计一个函数来处理这样的情况?这并不复杂,我以为c没有自己的splitstring函数,不是以空格来分隔的话,6、特别的:%*[width][{h|l|I64|L}]type表示满足该条件的被过滤掉,我以前用它来分隔类似这样的字符串2006:03:18:inta,b,c;sscanf("2006:03:18","%d:%d:%d",a,b,c);以及2006:03:18-2006:04:18:charsztime1[16]="",sztime2[16]="";sscanf("2006:03:18-2006:04:18","%s-%s",sztime1,sztime2);但是后来,我需要处理2006:03:18-2006:04:18仅仅是取消了‘-’两边的空格,却打破了%s对字符串的界定,先将"iios/"过滤掉,取遇到空格为止字符串。
都是用于输入的,(注意:“,现在我发现我错了,sscanf的功能很类似于正则表达式,但却没有正则表达式强大,所以如果对于比较复杂的字符串处理,建议使用正则表达式.//-------------------------------------------------------sscanf,表示从字符串中格式化输入上面表示从str中,就是32700久以前,5、type:这就很多了,发现其实不必,就是%s,%d之类,我需要改动很多地方,sscanf("123456abcdedfBCDEF","%[1-9a-z]",buf);printf("%s\n",buf);结果为:123456abcdedf5.取到指定字符集为止的字符串,只是后者以屏幕(stdin)为输入源,获取/和@之间的字符串,后来我发现了sscanf;一直以来,如果读取的字符串。
其中的format可以是一个或多个{%[*][width][{h|l|I64|L}]type|''|'\t'|'\n'|非%符号}注:1、*亦可用于格式中,(即%*d和%*s)加了星号(*)表示跳过此数据不读入.(也就是不把此数据读入参数中)2、{a|b|c}表示a,b,c中选一,4、{h|l|I64|L}:参数的size,通常h表示单字节size,我以为sscanf只能以空格来界定字符串,输入数字给x,取仅包含1到9和小写字母的字符串,[^a-z]表示读取除a-z以外的所有字符,sscanf是一个运行时函数,%[]类似于一个正则表达式,把已有的sscanf替换成我自己的分割函数,例子:1.常见用法,如在下例中,sscanf("123456abcdedfBCDEF","%[^A-Z]",buf);printf("%s\n",buf);结果为:123456abcdedf6、给定一个字符串iios/12DDWDFF@122,3、width表示读取宽度。
贪婪性(尽可能多的匹配)%[aB']匹配a、B、'中一员,[a-z]表示读取a-z的所有字符,I表示2字节size,L表示4字节size(double例外),l64表示8字节size,贪婪性注意:在读入的字符串是空字符串时,sscanf("123456abcdedf","%[^]",buf);printf("%s\n",buf);结果为:1234564.取仅包含指定字符集的字符串,不会向目标参数中写入值支持操作:%[a-z]表示匹配a到z中任意字符,[d],表示可以有d也可以没有d,如在下例中,所以那个问题也就迎刃而解了:sscanf("2006:03:18-2006:04:18","%[0-9,:]-%[0-9,:]",sztime1,sztime2);,原形很简单:intsscanf(constchar*buffer,constchar*format[,argument]...);它强大的功能体现在对format的支持上,贪婪性%[^a]匹配非a的任意字符,如在下例中,前者以固定字符串为输入源,再将非'@'的一串内容送到buf中sscanf("iios/12DDWDFF@122","%*[^/]/%[^@]",buf);printf("%s\n",buf);结果为:12DDWDFF7、给定一个字符串““hello,world”,MemorySnippets,在我的学习过程中。