sscanf

whyman 2010-02-03 10:48:35
char* szStr = "DB172-20100201-49611501";

请问下, 我要获取最后的 49611501 怎么用sscanf获取呢?

DWORD dwSerial = 0;
sscanf(szStr, "%*[^-]-%*[^-]-%d", &dwSerial);
[]号里如何写-号啊?
...全文
127 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
rabbii 2010-02-04
  • 打赏
  • 举报
回复
mark,学习~~~~
toborac 2010-02-03
  • 打赏
  • 举报
回复
[Quote=引用楼主 whyman 的回复:]
char* szStr = "DB172-20100201-49611501";

请问下, 我要获取最后的 49611501 怎么用sscanf获取呢?

DWORD dwSerial = 0;
sscanf(szStr, "%*[^-]-%*[^-]-%d", &dwSerial);
[]号里如何写-号啊?
[/Quote]
你这个语句的[]里可以写-号,意思是:
最后面是%d就是说想取一个整数
那两个%*[^-]-的意思是
%就是格式的意思,好比%d里的%
*表示任意(0个或多个)乱七八糟字符
[]表示指定要出现里面的字符或字符组
^表示不要
最后的-表示要一个-
连起来的意思就是搜索一个串,末尾是一个减号-,减号前面一定不能是减号[^-],只要满足前两个条件的其他字符全跳过
stardust20 2010-02-03
  • 打赏
  • 举报
回复
好像你写的那个就可以啊。。我试了下这个代码结果就是49611501
#include <stdio.h> 
int main()
{
char* szStr = "DB172-20100201-49611501";
int dwSerial = 0;
sscanf(szStr, "%*[^-]-%*[^-]-%d", &dwSerial);
printf("%d\n",dwSerial);
return 0;
}

zjf30366 2010-02-03
  • 打赏
  • 举报
回复
char a[10];
char b[10];
char c[10];
sscanf(szStr, "%s-%s-%s", a, b, c);
whyman 2010-02-03
  • 打赏
  • 举报
回复
顶下
bladesoft 2010-02-03
  • 打赏
  • 举报
回复
很好的改变format的函数
whyman 2010-02-03
  • 打赏
  • 举报
回复
哦, 是可以了, 刚刚不知道为什么不可以, 现在又可以了
赵4老师 2010-02-03
  • 打赏
  • 举报
回复
DWORD dwSerial = 0;
char* szStr = "DB172-20100201-49611501";
sscanf(szStr, "%*15s%d", &dwSerial); //%*15s表示跳过长度15的字符串不读
tan870426 2010-02-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 toborac 的回复:]

你这个语句的[]里可以写-号,意思是:
最后面是%d就是说想取一个整数
那两个%*[^-]-的意思是
%就是格式的意思,好比%d里的%
*表示任意(0个或多个)乱七八糟字符
[]表示指定要出现里面的字符或字符组
^表示不要
最后的-表示要一个-
连起来的意思就是搜索一个串,末尾是一个减号-,减号前面一定不能是减号[^-],只要满足前两个条件的其他字符全跳过

[/Quote]解释的很详细
lovesi3344 2010-02-03
  • 打赏
  • 举报
回复

mark
pang123hui 2010-02-03
  • 打赏
  • 举报
回复
对于%[]还可以用^+任意字符(包括eof)来结束字符串的输入。比如%[^-]就是直到有-输入,字符串才中止

而*表示0个或多个

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧