调用sscanf获取字符串,如何保证不越界

missheaven2011 2013-08-01 11:03:41
想通过调用sscanf函数获取某些对应的字符串,如何保证不越界
char a[] = "zhangsan-19890123-hangzhou";

sscanf(a, "%[^-]-%[^-]-%[^-]", name, year, addr);

如何声明name,year,adr三个变量,能实现即节省空间,又不会因为获取字符串而导致这三个变量越界
...全文
376 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lpcads 2013-08-02
  • 打赏
  • 举报
回复
改用 sscanf_s
赵4老师 2013-08-02
  • 打赏
  • 举报
回复
char a[] = "zhangsan-19890123-hangzhou";
char name[128],year[9],addr[256];
if (3==sscanf(a, "%127[^-]-%8[^-]-%255[^-]", name, year, addr)) {
 printf("name=[%s],year=[%s],addr=[%s]\n",name,year,addr);
} else {
 printf("Format error:[%s]\n",a);
}
绯红女王 2013-08-02
  • 打赏
  • 举报
回复
楼上正解!!
大尾巴猫 2013-08-02
  • 打赏
  • 举报
回复
先申请三个足够大的临时变量,比如1024的,用sscan读到临时变量中。用strlen计算每个临时变量中字符串长度,给name,year,adr 申请相应的长度,strncpy之。删除3个临时变量。 只不过,这样做有意义么 对于只进行一次sscan的,这样太麻烦了。 如果是多次sscan,并且要把这些数据做成一条条记录,用于查询或者读写进文件,每条记录长度不一样,编程实现麻烦且效率低。
图灵狗 2013-08-02
  • 打赏
  • 举报
回复
只能预先分配足够的空间。
引用 楼主 missheaven2011 的回复:
想通过调用sscanf函数获取某些对应的字符串,如何保证不越界 char a[] = "zhangsan-19890123-hangzhou"; sscanf(a, "%[^-]-%[^-]-%[^-]", name, year, addr); 如何声明name,year,adr三个变量,能实现即节省空间,又不会因为获取字符串而导致这三个变量越界
自信男孩 2013-08-02
  • 打赏
  • 举报
回复
这个只能尽量将三个变量申请足够的空间。
max_min_ 2013-08-01
  • 打赏
  • 举报
回复

 字符串已知,不能对应分配么?
taodm 2013-08-01
  • 打赏
  • 举报
回复
改用c++

69,371

社区成员

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

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