使用sscanf解析无法正常工作

时间:2014-06-09 11:55:02

标签: c scanf stdio

需要使用sscanf获取值解析..用作下面但没有得到结果..

字符串:abc_2_4 我需要得到4

我的节目

  char sentence []="abc_1_2";
  char str [20];
  int i,j;

  sscanf (sentence,"%s_%d_%d",str,&i,&j);
  printf ("%s  %d %d\n",str,i,j);

输出

abc_1_2 32768 134520820

我怀疑我们是否可以在sscanf中解析字符串中使用非白色空格字符'_'。

请给我一些想法。

2 个答案:

答案 0 :(得分:3)

sscanf()在解析%s时不会“向前看”,知道它应该以下划线结尾,这不是%s转换说明符的含义。

您需要使用%[^_]来捕获除下划线以外的所有字符。

答案 1 :(得分:2)

sscanf期望%s标记为whitespace分隔符。但是,abc_之间没有空格。所以它也会计算_

因此,在您的情况下,str将包含整个字符串abc_1_2ij包含垃圾值。

忽略_你可以尝试这样的事情。

  sscanf (sentence,"%[^_]_%d_%d",str,&i,&j);