利用sscanf()匹配字符串需要注意贪婪匹配

来源:互联网 发布:阿里云是邮箱吗 编辑:程序博客网 时间:2024/06/06 12:28

http://www.mysql100.com/c/c_error_list/2013/0130/332.html

利用sscanf()匹配字符串需要注意贪婪匹配

发布时间:2013-01-30 15:12

先来看看下面一段代码:

#include <stdio.h>

int main()
{
  char de_info[64]="DE_smartmedia:2.2.2154(121227225952b)";
  char db[64]={0};
  char version[64]={0};
  sscanf(de_info,"DE_%s:%s",db,version);
  printf("###%s+++%s###\n",db,version);
}
 
运行的结果如下:
 
###smartmedia:2.2.2154(121227225952b)+++###
 
我们可以看到:后面的字符串并没有匹配到,在这里我们犯了贪婪匹配的错误,第一个%s也包括了:。
 
修改后的程序如下:
#include <stdio.h>
int main()
{
  char de_info[64]="DE_smartmedia:2.2.2154(121227225952b)";
  char db[64]={0};
  char version[64]={0};
  sscanf(de_info,"DE_%[^:]:%s",db,version);
  printf("###%s+++%s###\n",db,version);
}
 
运行结果如下:
 
###smartmedia+++2.2.2154(121227225952b)###
0 0