sscanf,sscanf_s及其相关用法

  • 格式:doc
  • 大小:60.00 KB
  • 文档页数:7

下载文档原格式

  / 7
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include

定义函数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读入第二个整数。

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);

}

执行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地址转换为四个整数:

1char * inputIp

2int ip[4];

3sscanf_s(inputIp, "%d.%d.%d.%d", &ip[0], &ip[1],&ip[2],&ip[3]);

注意sscanf_s,当读入的类型是整数或其它长度可以确定的类型时,不能在类型后面跟上长度,但是对于字符串类型(char *)长度无法得知则必须在类型后面明确指出字符串的最大长度(即可

以容纳的空间)。举例如下:

4// crt_sscanf_s.c

5// This program uses sscanf_s to read data items

6// from a string named tokenstring, then displays them.

7

8#include

9#include

10

11int main( void )

12{

13char tokenstring[] = "15 12 14...";

14char s[81];

15char c;

16int i;

17float fp;

18

19 // Input various data from tokenstring:

20 // max 80 character string plus NULL terminator

21 sscanf_s( tokenstring, "%s", s, _countof(s) );

22 sscanf_s( tokenstring, "%c", &c, sizeof(char) );

23 sscanf_s( tokenstring, "%d", &i );

24 sscanf_s( tokenstring, "%f", &fp );

25

26 // Output the data read

27 printf_s( "String = %s\n", s );

28 printf_s( "Character = %c\n", c );

29 printf_s( "Integer: = %d\n", i );

30 printf_s( "Real: = %f\n", fp );

31}

对于多个字符串读入的情况,代码如下:

32sscanf_s(inputString, "%s.%s.%s.%s", s1, s1.length, s2, s2.length, s3, s3.length, s4, s4.length);

sscanf 函数非常好用,居然我以前一直不知道这个函数。最近朋友用VS2008写程序时用到这个函

数的安全版本 sscanf_s ,却出现异常问题,无法解析字符串不说,还会崩溃。

int sscanf_s(

const char *buffer,

const char *format [,

argument ] ...