我有一个很长的字符串需要读入,数据长度的内容是不确定的,但格式已知。比如字符串如下:
“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读取后,移动到未读取的地方呢?
“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读取后,移动到未读取的地方呢?
解决方案 »
- 为什么Outlook发邮件需要连服务器,而MAPI却不需要?
- 关于winsock在Windows下进行网络编程的基本方法..的疑问....
- *****编写Filter很难吗?********
- 刚才自己解决了一个困扰了好几天问题,高兴,散分~~~~
- 自己作了两个控件,A和B,我怎么在B中动态调用A?
- 窗口前置的问题?
- CTreeCtrl的SortChildren()为什么有时候没有效果??是不是有什么限制?
- 南京的程序员来签个名,统计一下南京的软件力量
- 如何判断一个文件是否存在?
- 各路高手看过来。请谈一下视频广播的实现方法好吗?谢谢。。
- 老是提示'm_pConnection' ,'m_pRecordset' : undeclared identifier
- 自定义类中如何使用对话框中的一些函数
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);
}