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都写出来了,是对的
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都写出来了,是对的
{
}
CString b("aaa"); if (a == b)
{
MessageBox("a == b");
}
就是这样的,也可以用
if (a.Compare(b) == 0)
这些最好查一下msdn中cstring 类的方法,都有说明!
报错都是:错误是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出来跟设计是对的,是要的字符串,会是其他地方出错了吗?
a=Sheight+GroupData.GetAt(g2i+0);
b=ResultStar1.GetAt(i*3+0);
比较一下a.GetLength(),b.GetLength()......
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也有+操作的啊,怎么回事,到这就报错?
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语句这句就报错?我的问题还没有解决
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不覆盖此反例
}
出现这样的问题,一般是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 越界了?
b=ResultStar1.GetAt(i*3+0);
把这两个赋值改成:
a.Format("%s%s", Sheight, GroupData.GetAt(g2i+0);
b.Format("%s", ResultStar1.GetAt(i*3+0);
你的编码要规范一点