帮忙看下这段程序

xiven 2009-06-05 11:47:42
程序目的是:将字符串“00:00:00”让其按照时间模式变化


char mark[2]=":";
char*p,*a[3];
int i=0,j=0,b[3];
int nlength=m_SetTime.GetLength();//m_SetTime为已知的CString类型
char *sz=new char[nlength];
sz=m_SetTime.GetBuffer(0); // 将CString类型转换成char*
p=strtok(sz,mark); //分隔字符串
while (p)
{
a[i++]=p;
p=strtok(NULL,mark);
}
for (j;j<=2;j++)
{
CString stri;
stri.Format("%s",a[j]); // char*转换成CString
b[j]=atoi(stri); //CString转换成int 问题就在这2句,如果不注释这句,运行程序后总是提示内存错误·· }


请高手指点下 ,,改了N次问题一直没解决··先谢谢了
...全文
25 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wocow3 2009-06-06
  • 打赏
  • 举报
回复
注意在适当的位置加上ReleaseBuffer
逻辑上没啥问题,直接b[j]=atoi(a[j]);就行了
晨星 2009-06-06
  • 打赏
  • 举报
回复
a[j]是个char,你怎么用打印字符串的"%s"来格式化?
xiven 2009-06-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 steedhorse 的回复:]
a[j]是个char,你怎么用打印字符串的"%s"来格式化?
[/Quote]
xiven 2009-06-06
  • 打赏
  • 举报
回复
呵呵 谢谢了 在 sz=m_SetTime.GetBuffer(0); 后加了句m_SetTime.ReleaseBuffer();问题就没了 。谢谢2楼 的指点
至于releasebuffer,在MSDN中有这样一句话.
If you use the pointer returned by GetBuffer to change the string contents, you must call ReleaseBuffer before using any other CString member functions.
在对GetBuffer返回的指针使用之后需要调用ReleaseBuffer,这样才能使用其他Cstring的operations。否则会发生错误.

16,551

社区成员

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

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

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