sscanf函数与sscanf_s函数使用
转载:http://www.xuebuyuan.com/zh-tw/96621.html
#include<stdio.h>
定义函数 int sscanf (const char *str,const char * format,........);
函数说明
sscanf()会将参数str的字元串根据参数format字元串来转换并格式化数据。格式转换形式请参考scanf()。转换后的结果存于对应的参数内。
返回值 成功则返回参数数目,失败则返回-1,错误原因存于errno中。返回0表示失败 否则,表示正确格式化数据的个数 例如:sscanf(str,"%d%d%s", &i,&i2, &s); 如果三个变成都读入成功会返回3。如果只读入了第一个整数到i则会返回1。证明无法从str读入第二个整数。
int main() { int i; unsigned int j; char input[ ]="10 0x1b aaaaaaaa bbbbbbbb"; char s[5]; sscanf(input,"%d %x %5[a-z] %*s %f",&i,&j,s,s); printf("%d %d %s",i,j,s); return 0; }
执行 10 27 aaaaa
大家都知道sscanf是一个很好用的函数,利用它可以从字元串中取出整数、浮点数和字元串等等。它的使用方法简单,特别对于整数和浮点数来说。但新手可能并不知道处理字元串时的一些高级用法,这里做个简要说明吧。
1. 常见用法。
charstr[512]={0}; sscanf("123456","%s",str); printf("str=%s",str);
2. 取指定长度的字元串。如在下例中,取最大长度为4位元组的字元串。
sscanf("123456","%4s",str); printf("str=%s",str);
3. 取到指定字元为止的字元串。如在下例中,取遇到空格为止字元串。
sscanf("123456abcdedf","%[^]",str); printf("str=%s",str);
4. 取仅包含指定字符集的字元串。如在下例中,取仅包含1到9和小写字母的字元串。
sscanf("123456abcdedfBCDEF","%[1-9a-z]",str); printf("str=%s",str);
5. 取到指定字符集为止的字元串。如在下例中,取遇到大写字母为止的字元串。
sscanf("123456abcdedfBCDEF","%[^A-Z]",str); printf("str=%s",str);
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
可以用如下代码将字符串形式的ip地址转换为四个整数:
char * inputIp int ip[4]; sscanf_s(inputIp, "%d.%d.%d.%d", &ip[0], &ip[1], &ip[2], &ip[3]);
注意sscanf_s,当读入的类型是整数或其它长度可以确定的类型时,不能在类型后面跟上长度,但是对于字符串类型(char *)长度无法得知则必须在类型后面明确指出字符串的最大长度(即可以容纳的空间)。举例如下:
// crt_sscanf_s.c // This program uses sscanf_s to read data items // from a string named tokenstring, then displays them. #include <stdio.h> #include <stdlib.h> int main( void ) { char tokenstring[] = "15 12 14..."; char s[81]; char c; int i; float fp; // Input various data from tokenstring: // max 80 character string plus NULL terminator sscanf_s( tokenstring, "%s", s, _countof(s) ); sscanf_s( tokenstring, "%c", &c, sizeof(char) ); sscanf_s( tokenstring, "%d", &i ); sscanf_s( tokenstring, "%f", &fp ); // Output the data read printf_s( "String = %s\n", s ); printf_s( "Character = %c\n", c ); printf_s( "Integer: = %d\n", i ); printf_s( "Real: = %f\n", fp ); }
对于多个字符串读入的情况,代码如下:
sscanf_s(inputString, "%s.%s.%s.%s", s1, s1.length, s2, s2.length, s3, s3.length, s4, s4.length);