"); //-->
问题:提取“485:80:63”字符串中数字。
#include "stdio.h"
int main(void)
{
char aTxBuffer[128];
sprintf(aTxBuffer,":%d:%d:%d\n",456,80,433);
printf("len is %d,%s\r\n",(strlen(aTxBuffer)),aTxBuffer);
printf("hello\r\n");
char *p = aTxBuffer;
int num[100];
int i, r, v, n;
i = 0;
//从字符串中读取出内容
while (1)
{
r = sscanf(p, "%d:%n", &v, &n);
if (1 == r)
{
num[i++] = v; //4 3 3
p += n;
printf("%d,%d\r\n",v,n);
}
else if (0 == r)
{
p++;
}
else
{
break;
}
}
//打印读取到的内容
for (n = 0; n < i - 1; n++)
printf("%d ", num[n]);
printf("%d\n", num[i - 1]);
sscanf(p, "%d:%n", &v, &n);
return 0;
}其中使用到sscanf 函数。比较好的介绍如下:
http://www.jb51.net/article/90495.htm
其中:2) n:至此已读入值(未必赋值)的等价字符数,该数目必须以int类型存储。如"10,22"经过"%d%*[^0-9]%n"格式转换后,%n对应的参数值为3(虽然','未参与赋值)。
'n'并非转换符,尽管它可用'*'抑制。C标准声称,执行%n指令并不增加函数返回的赋值次数;但其勘误表中的描述与之矛盾。建议不要假设%n对返回值的影响。
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。