ssprintf()函数和sscanf()函数的用法

    xiaoxiao2021-12-14  19

    ssprintf()函数和sscanf()函数的用法

    1、ssprinf( )函数的用法

    sprintf的作用是将一个格式化的字符串输出到一个目的字符串中,而printf是将一个格式化的字符串输出到屏幕,其原型为:     int sprintf(char *str, char * format [, argument, ...]); sprintf()会根据参数format 字符串来转换并格式化数据,然后将结果复制到参数str 所指的字符串数组,直到出现字符串结束('\0')为止。 【返回值】成功则返回参数str 字符串长度,失败则返回-1, sprintf()最常见的应用之一莫过于把整数打印到字符串中,如:     sprintf(s, "%d", 123);  //把整数123打印成一个字符串保存在s中     sprintf(s, "%8x", 4567);  //小写16进制,宽度占8个位置,右对齐

    2、sscanf( )函数的用法 sscanf与scanf类似,都是用于输入的,只是后者以屏幕(stdin)为输入源,前者以固定字符串为输入源。 sscanf与scanf类似,都是用于输入的,只是后者以屏幕(stdin)为输入源,前者以固定字符串为输入源。 函数原型: int sscanf( string str, char *format, mixed var1, mixed var2 ... ); eg: sscanf(surBuf, "%[1-9]", dstBuf); 先说下%[]:其基本格式为 %[set],表示将接收一个由set指定格式的字符串,其中set表示可接受的字符集合。 set一般有两种情况: 一种是"^set"表示非, 即在输入的字符串中将匹配所有不在set中出现的字符,遇到set中的字符时停止匹配。 另一种是"set"表示在输入的字符串中将匹配所有在set中出现的字符,遇到非set中的字符时停止匹配。 eg: sscanf("hello,world","%[^,]",buf); //当surBuf字符串中出现","时停止匹配,则buf=hello; sscanf("abcdefg","%[^gfd]",buf);//当surBuf字符串中出现'g','f','d'中的任意一个时停止匹配,则buf=abc,   即surBuf字符串中出现了d,f,g时不再将surBuf字符串中内容放入buf sscanf("abcdefg","%[cbad]",buf);//只匹配'a','b','c','d'这几个字符,如果不是这几个字符则停止匹配,buf=abcd  特殊情况: (1)如果要匹配"^"时,当然不能直接放在[]中,所以可以用%[ab^cd]这种方式, (2)当要匹配右方括号"]"时,应把其放在set中第一个位置,如"%[]abc]"表示匹配的字符集为{], a, b, c}, 又如"%[^]abc]"表示匹配所有非"], a, b, c"中的字符 另外,还可以使用"-" 如%[a-z]表示只匹配abcd....yz等小写的字母;%[0-9]表示只匹配0,1,2...9等数字; (3) * 表示跳过,如: int main() { char buf[100]="123:2333:ahahaha:hututu:demaxiya:12138:hello"; char user[20]=""; char host[20]=""; char msg[20]=""; int cmd = 0; sscanf(buf, "%*d:%*[^:]:%*[^:]:%[^:]:%[^:]:%d:%s", user, host, &cmd, msg); return 0; } 结果:user="hututu",host="demaxiya",cmd=12138,msg=hello     注意,“-”的字符只有在其左右两边都有有效字符时才有这个作用,否则被认为是普通字符,如“a-c-e-g”匹配的字符为{a, b, c, -, e, f, g},这样也为输入“-”字符提供了方法。 其中的format可以是一个或多个 {%[*] [width] [{h | l | I64 | L}]type | ' ' | '\t' | '\n' | 非%符号}   注:   1、 * 亦可用于格式中, (即 %*d 和 %*s) 加了星号 (*) 表示跳过此数据不读入. (也就是不把此数据读入参数中)   2、{a|b|c}表示a,b,c中选一,[d],表示可以有d也可以没有d。   3、width表示读取宽度。   4、{h | l | I64 | L}:参数的size,通常h表示单字节size,I表示2字节 size,L表示4字节size(double例外),l64表示8字节size。   5、type :这就很多了,就是%s,%d之类。   6、特别的:%*[width] [{h | l | I64 | L}]type 表示满足该条件的被过滤掉,不会向目标参数中写入值   支持集合操作:   %[a-z] 表示匹配a到z中任意字符,贪婪性(尽可能多的匹配)   %[aB'] 匹配a、B、'中一员,贪婪性   %[^a] 匹配非a的任意字符,贪婪性 注意:在读入的字符串是空字符串时,sscanf函数并不改变待读入到的字符串的值。 常见用法: 1、取指定长度的字符串。如在下例中,取最大长度为4字节的字符串。       sscanf("123456 ", "%4s", buf);   2、给定一个字符串“hello, world”,仅保留world。(注意:“,”之后有一空格)       //%*s表示第一个匹配到的%s被过滤掉,即hello和逗号被过滤了,过滤一空格结束,如果没有空格则结果为NULL。       sscanf("hello, world", "%*s%s", buf);       3、sscanf("16:12:02", "%d:%d:%d",&a1,&b1,&c1);//这个不行啊   以及2006:03:18 - 2006:04:18: char sztime1[16] = "", sztime2[16] = ""; sscanf("2006:03:18 - 2006:04:18", "%s - %s", sztime1, sztime2);

    转载请注明原文地址: https://ju.6miu.com/read-963538.html

    最新回复(0)