原来有全函数
void CBigInt::Get(CString& str, unsigned int system)
{
    int len=str.GetLength(),k;
......
}被我改成这样
void CBigInt::Get(char *str, unsigned int system)
{
    int len=strlen(str),k;
......
}
后,有时结果正确,有时错误.请问正确的是怎样的.
查了昨晚一个晚上+今天上午,才知道原因在此处.谢谢关照,在线期待中....

解决方案 »

  1.   

    try
    int len=strlen((LPCTSTR)str),k;
    其实 len=str.GetLength()挺好 用CString类自己的函数
      

  2.   

    看看出错的时候,str指向内存地址的内容是不是以\0结尾的!
      

  3.   

    问题出再char *str,str为空。。
      

  4.   

    二位:两种方法都试了,仍旧。str指向的内容的确是以'\0'结尾的。
    CString t="0123456789ABCDEF";之后,具体存放在t的哪个成员处? class CString 的那个定义看不懂,GetLength()的函数体也不知道写在哪儿。不过经试验,GetLength()的返回值与strlen()的返回值相同,所以怀疑GetLength()除了返回长度外,是否还做了一些其它手脚?翘首期盼中......
      

  5.   

    醉大饿极:str不为空,在接受参数后,我让它输出str的值,正常。
    问题就在,有的str给它结果正确,有的错误。所有的str都是非空的,确认是。所以一开始怀疑是后面的函数体处理不全面。而差另就在一个GetLength(). 郁闷中.
      

  6.   

    http://eaoo.com/design/list.asp?classid=2&Nclassid=13
      

  7.   

    CString 支持unicode,定义了_UNICODE后存的就是unsigned short,没有的话就是char,此时长度是不一样的,etc
    CString str=_T["汉字"];
    #ifdef _UNICODE
      int len=str.GetLength();
      ASSERT(len==2);
    #else
      int len=str.GetLength();
      ASSERT(len==4);
    #endif
    //建议用_tcslen()---vc定义过的宏,在unicode下是wcslen(),在mb下是strlen();
    //因此它返回的长度一定等于CString的GetLength(),如果没人对它重写的话.
      ASSERT(_tcslen()==str.GetLength());
      

  8.   

    tryber:参数全部是数字和字母.
      

  9.   

    从两行代码看不出问题,你也没说:-) 不知道你接下来有没有内存操作的什么的,注意一下有没有溢出,提醒一下,_T["23"]的unicode的sizeof是4,而mb的sizeof是2