2011年5月16日 星期一

sscanf心得

%*s => 加上星號表視忽略該字串,簡單來說,就是無法在後面的不定參數中接收該值

For example:
假設source為
<changecount attr="500">100</changecount>

sscanf(text,"%*[^>]>%[^<]",tmp); %*[^>] 就是取到第一次的>前,加上星號代表這是用不到的部份
也就是<changecount attr="500" 為止,
此時的目標變成>100</changecount>
接著%[^<] 代表</changecount>的<前 於是就剩下>100啦
再加上上面的>符號取出來的東西就是100了。


int main()
{
char text[]="1005";
char text2[]= "attr = \"1000\" str = \"50000\"";
double number=0;
char tmp[100];

sscanf(text,"%*[^>]>%d",&number);
printf("Himiro Test:number is %d\n",number);

//sscanf(text,"%*[^>]>%[^<]<%*[^\n]",tmp);
sscanf(text,"%*[^>]>%[^<]",tmp);
printf("Himiro Test:number is %s\n",tmp);

sscanf(text2,"%*[^\"]\"%d",&number);
printf("Himiro Test:value is %d\n",number);

//sscanf(text2,"%*[^\"]\"%[^\"][^\"]",tmp);
sscanf(text2,"%*[^\"]\"%[^\"]",tmp);   //%*[^"]"%[^"]
printf("Himiro Test:value is %s\n",tmp);
}

Result:
Himiro Test:number is 1005
Himiro Test:number is 1005
Himiro Test:value is 1000
Himiro Test:value is 1000

沒有留言:

張貼留言