"); //-->
问题:提取“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对返回值的影响。
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。