一个函数,下面简单代码
int CTestDlg::myfunc(LPSTR text)
{
   CPoint point;
   LPSTR str=text;
   flaot m_CodeWidth = 0.02;
   float rato = 1.1;   while(*str)
   {
str++;
point.x+=int(m_CodeWidth*rato)*(*str-'0');
str++;
  }
}就这么简单的代码,一个按钮事件触发调用该函数,text作为一个字符串传入,第一次调用循环完后,str后面发现有两个空格,这个可能是因为point.x+=这句造成的;再按一次按钮,同样的字符串,循环完字符串后,str后面发现有" 葺葺"这样的东西,导致两次结果point的值不一样,搞不懂是为什么,明明是同一个字符传入的
要怎么修改才不会呢?

解决方案 »

  1.   

    每个循环 str++; 了两次
    过了\0结束符
      

  2.   

    这个函数并没修改text啊,应该查看其他修改text的地方
      

  3.   

    每个循环 str++; 了两次 
    过了\0结束符 这个\0加在什么地方?
      

  4.   

    \0是字符串结束符,每上ASC字符串都以\0结束
      

  5.   

    对,也许是加两次后超过了text空间的长度,加到外边去了,把串最后NULL的位置给挤没了,所以出现乱码
    我认为象这种函数设计时应该加个源串长度参数,如myfunc(LPSTR text,const int strlen)否则太危险了