sscanf只部分读取以逗号分隔的列表

时间:2013-12-03 23:35:35

标签: c scanf

我在buff中有这样的字符串:

$GPGGA,031956,2218.2035,N,11410.7595,E,1,04,3,9,005.9,M,-001.3,M,,*51

我在做什么是读取逗号到数组之间的一些值:

char ts[16];
char lat[16];
char latd[16];
char lon[16];
char lond[16];
char sats[16];

sscanf(
       buff,
       "%*[^,],%[^,]s,%[^,]s,%[^,]s,%[^,]s,%[^,]s,%*[^,],%[^,]s",
       ts,lat,latd,lon,lond,sats
       );

sscanf读得很好(031956)。但是,lat,latd等没有任何值。

为什么会这样?

1 个答案:

答案 0 :(得分:4)

您的格式字符串中有一些错误的s个字符。

您当前的正则表达式与%*[^,],%[^,]匹配,但随后与后面的s字符不匹配,因此字符串的其余部分不匹配。如果删除这些s字符,则格式应与您提供的字符串中的值031956,2218.2035,N,11410.7595,E,04相匹配。