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

 

posted @ 2017-07-10 08:24  Jarvis_Xu  阅读(1296)  评论(0编辑  收藏  举报