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

 先来看看下面一段代码:

  
  
  
  
  1. #include <stdio.h> 
  2. int main() 
  3.   char de_info[64]="DE_smartmedia:2.2.2154(121227225952b)"
  4.   char db[64]={0}; 
  5.   char version[64]={0}; 
  6.   sscanf(de_info,"DE_%s:%s",db,version); 
  7.   printf("###%s+++%s###\n",db,version); 

  运行的结果如下:  ###smartmedia:2.2.2154(121227225952b)+++###
  我们可以看到:后面的字符串并没有匹配到,在这里我们犯了贪婪匹配的错误,第一个%s也包括了:。
  修改后的程序如下:

  
  
  
  
  1. #include <stdio.h> 
  2. int main() 
  3.   char de_info[64]="DE_smartmedia:2.2.2154(121227225952b)"
  4.   char db[64]={0}; 
  5.   char version[64]={0}; 
  6.   sscanf(de_info,"DE_%[^:]:%s",db,version); 
  7.   printf("###%s+++%s###\n",db,version); 

  运行结果如下:

  ###smartmedia+++2.2.2154(121227225952b)###

  本文转载自:http://www.mysql100.com/c/c_error_list/2013/0130/332.html

你可能感兴趣的:(sscanf(),贪婪匹配)