CString a,b,c;
a=Sheight+GroupData.GetAt(g2i+0);
b=ResultStar1.GetAt(i*3+0);TRACE("a=%s,b=%s",a,b);
  if(a==b)
    i++;为什么在if(a==b)处总是出错?这样不能比较a,b字符串是否相等吗?怎么写
TRACE("a=%s,b=%s",a,b);写出的a,b都写出来了,是对的

解决方案 »

  1.   

    if(a.Compare(b) == 0)
    {
    }
      

  2.   

    CString a("aaa");
    CString b("aaa"); if (a == b) 
    {
    MessageBox("a == b");
    }
    就是这样的,也可以用
    if (a.Compare(b) == 0)
      

  3.   

    a.Compare(b) == 0;
    这些最好查一下msdn中cstring 类的方法,都有说明!
      

  4.   

    还是错了报错一样,if(1)是对的,能进去,是不是说我的关系表达式if(a==b)写错了,还有可能其他原因啊?我把他们a,b都打出来都是一样的啊
      

  5.   

    你们说的方法我以前都试过了,但还是同样的错误.
    报错都是:错误是File:afxcoll.inl Line:222 
    编译没有错误,执行时出来的.会不会是其他原因
    CStringArray GroupData;
    CString Sheight;
     Sheight="height!=";
    CString a,b,c;
    a=Sheight+GroupData.GetAt(g2i+0);
    b=ResultStar1.GetAt(i*3+0);我把a,b都TRACE出来跟设计是对的,是要的字符串,会是其他地方出错了吗?
      

  6.   

    上面的能这样加吗,得到a,b吗?有没有问题啊?
    a=Sheight+GroupData.GetAt(g2i+0);
    b=ResultStar1.GetAt(i*3+0);
      

  7.   

    a,b都打出来都是一样的也不能说明a==b,你看看a或b的后面是否有空格或其他不可见字符。
    比较一下a.GetLength(),b.GetLength()......
      

  8.   

    我又加了句
    TRACE("a=%s,b=%s",a,b);
    TRACE("a=%d,b=%d",a.GetLength,b.GetLength);
    结果是
    a=height!=low,b=height!=null  a=4219142,b=4219142
    a,b 长度怎么这么长啊?  CStringArry的GetAt是返回Cstring
      Cstring也有+操作的啊,怎么回事,到这就报错?
      

  9.   

    写错了少写了一个()
    TRACE("a=%s,b=%s",a,b);
    TRACE("a=%d,b=%d",a.GetLength(),b.GetLength());
    是对的a=height!=low,b=height!=null  a=11,b=12 
    但是关键是为什么会报错,
      if(a==b)
        i++;
    到if语句这句就报错?我的问题还没有解决
      

  10.   

    把我的代码给大家看看:
    bool CMainFrame::IfCovered(CStringArray &ResultStar1,CStringArray &GroupData,int g2i)
    {   int i;
    //GroupData为反例集,从g2i开使的连续三个元素,考察这个反例    i=0; while((i*3+2)<ResultStar1.GetSize())
    {
    CString a,b,a1,b1,a2,b2;
    TRACE("g2i=%d,i*3=%d",g2i,i*3);
    a=Sheight+GroupData.GetAt(g2i+0);
    b=ResultStar1.GetAt(i*3+0);
    a1=ResultStar1.GetAt(i*3+1);
    b1=(Shair+GroupData.GetAt(g2i+1));
    a2=ResultStar1.GetAt(i*3+2);
    b2=Seye+GroupData.GetAt(g2i+2);
    TRACE("a=%s,b=%s",a,b);
    TRACE("a=%d,b=%d",a.GetLength(),b.GetLength());
          
        if(a.Compare(b)==0)
     
            {AfxMessageBox("近来了");
    i++;}
      
        //else if(ResultStar1.GetAt(i*3+1)==(Shair+GroupData.GetAt(g2i+1)))
         else if(a1==b1)
          i++;
      else if(a2==b2)
      // else if(ResultStar1.GetAt(i*3+2)==(Seye+GroupData.GetAt(g2i+2)))
           i++;//此反例不覆盖就是不符合部分star中这个复合
       else
        return true;//此反例覆盖就是符合部分star中这个复合,只要符合一个符合就可以了
       //因为部分star是复合的析取.这个部分star覆盖此反例 }
    return false;//这个部分star不覆盖此反例
    }
      

  11.   

    File:afxcoll.inl Line:222
    出现这样的问题,一般是assert断言出错。   
      你可以打开该文件并定位到222行。   
      _AFXCOLL_INLINE   CString   CStringArray::GetAt(int   nIndex)   const   
      {   ASSERT(nIndex   >=   0   &&   nIndex   <   m_nSize);   
      return   m_pData[nIndex];   }   
        
     你在执行a==b调用==重载符号的时候,是不是访问cstring a 或 b 越界了?
      

  12.   

    拜托,不要用什么a1,b2,c3的做变量
      

  13.   

    a=Sheight+GroupData.GetAt(g2i+0);
    b=ResultStar1.GetAt(i*3+0);
    把这两个赋值改成:
    a.Format("%s%s", Sheight, GroupData.GetAt(g2i+0);
    b.Format("%s", ResultStar1.GetAt(i*3+0);
    你的编码要规范一点