关于用sscanf_s读入格式字符串的问题

Cipherliu 2011-07-13 10:45:08
我有一个很长的字符串需要读入,数据长度的内容是不确定的,但格式已知。

比如字符串如下:
“TYPE=3, Degree=2, CtrlPtCount=7,knots=[9424.777961,9424.777961,9424.777961,12566.370614,12566.370614,15707.963268,15707.963268,18849.555922,18849.555922,18849.555922]”

我的读取代码

int DMType, nDegree, nCtrlCount;
str += sscanf_s(str, "TYPE=%d, Degree=%d, CtrlPtCount=%d,", &DMType, &nDegree, &nCtrlCount);//这时只移动了三个字符,不对

//读取节点向量
str += sscanf_s(str, "knots=[");
int KnotsLen = nDegree+nCtrlCount+1;
double* Knots = new double[KnotsLen];
int i;
for (i = 0; i<KnotsLen-1; i++)
{
str += sscanf_s(str, "%lf,", &Knots[i]);//这时移动也不对
}
str += sscanf_s(str, "%lf]", &Knots[i]); //这时只移动也不对

问题的原因找到了,是因为sscanf_s函数的返回值不是读取字符串的长度,是读取的数据的项数。怎么才能让str读取后,移动到未读取的地方呢?



...全文
655 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
快乐鹦鹉 2011-07-13
  • 打赏
  • 举报
回复
如果就是样例串的话,先用逗号拆分处前三项,剩下的就是第四项。每一项用=号进行拆分,可以分别得到名称和数值
Cipherliu 2011-07-13
  • 打赏
  • 举报
回复
这个问题怎么就没人帮忙解决呢?
ouyh12345 2011-07-13
  • 打赏
  • 举报
回复
得移动字符串
这种情况,查找=更好些
pcgg5244 2011-07-13
  • 打赏
  • 举报
回复
我觉得还是先用","隔开,再分别sscanf比较靠谱
CString strSrc=“TYPE=3, Degree=2, CtrlPtCount=7,knots=[9424.777961,9424.777961,9424.777961,12566.370614,12566.370614,15707.963268,15707.963268,18849.555922,18849.555922,18849.555922]”;
int pos;
CString strTmp;
while(-1 != (pos=strSrc.Find(',',0)))
{
strTmp=strSrc.Left(pos);
sscanf_s(...);
strSrc=strSrc.Right(strSrc.GetLength()-pos-1);
}
zhu6789888 2011-07-13
  • 打赏
  • 举报
回复
移动是什么意思?
Cipherliu 2011-07-13
  • 打赏
  • 举报
回复
如何用sscanf_s一次读完。。。,那些参数如何一次性输入,请给个例子? 还有,如果数据量很大,可能会有上万个,会不会把栈破坏掉?
oyljerry 2011-07-13
  • 打赏
  • 举报
回复
既然字符串格式已知,那么就最好一次性把各个字段的数据都sscanf_s读入你的各个变量.
kyotrue 2011-07-13
  • 打赏
  • 举报
回复
用sscanf_s一次读完。。。

你要好好看函数说明,sscanf_s的返回值是成功转换的标记数,sscanf_s(str, "TYPE=%d, Degree=%d, CtrlPtCount=%d,", &DMType, &nDegree, &nCtrlCount)这句转换了DMType, nDegree, nCtrlCount这三个,所以返回3

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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