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

先来看看下面一段代码:

#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)###
posted @ 2013-11-07 14:50  Fight_4_ever  阅读(1177)  评论(0编辑  收藏  举报