sscanf,sscanf_s及其相关用法

  • 格式:wps
  • 大小:51.50 KB
  • 文档页数:9

下载文档原格式

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

sscanf,sscanf_s 及其相关用法 #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 地址转换为四个整数:
   char * inputIp int ip[4]; sscanf_s(inputIp, "%d.%d.%d.%d", &ip[0], &ip[1],&ip[2],&ip[3]);
注意 sscanf_s,当读入的类型是整数或其它长度可以确定的类型时,不能在类型后面跟上长度,但 是对于字符串类型(char *)长度无法得知则必须在类型后面明确指出字符串的最大长度(即可以容纳 的空间)。举例如下:
        int main(void )  {  char tokenstring[] ="15 12 14...";  char s[81];  char c;  int i;  float fp;  #include #include // crt_sscanf_s.c // This program uses sscanf_s to read data items // from a string named tokenstring, then displays them.

 // 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);
sscanf 函数非常好用,居然我以前一直不知道这个函数。最近朋友用 VS2008写程序时用到这个函 数的安全版本 sscanf_s ,却出现异常问题,无法解析字符串不说,还会崩溃。 int sscanf_s( const char *buffer, const char *format [, argument ] ... ); 这是 MSDN 里面关于函数的定义,没有继续详细查看后面的备注,以及实例的情况下。根本感觉不到 sscanf 与 sscanf_s 的区别。以为仍然是像 sscanf 一样使用,以致出现奇怪问题。
Example: // crt_sscanf_s.c // This program uses sscanf_s to read data items // from a string named tokenstring, then displays them. #include #include int main( void ) { char char char tokenstring[] = "15 12 14..."; s[81]; c;