typedef struct aa
{
   CString a[10];
}bb;
bb cc[10];
cc[1].a[1]="tt"; //为什么这样赋值出错误啊

解决方案 »

  1.   


    typedef struct aa 

       CString a[10]; 
    }bb; 
    bb cc[10]; 
    cc[1].a[1]= _T("tt"); 
      

  2.   

    ? 没错。你那里出什么错?贴出来。我测试如下:
    #include "afx.h"int main()
    { typedef struct aa 

       CString a[10]; 
    }bb;
     
    bb cc[10];  cc[1].a[1]="tt"; //为什么这样赋值出错误啊 }
    //VC6,setting中设置了使用MFC
      

  3.   

    还是不行 还是说AFX.in只类的错误
      

  4.   

    _T这个宏只是UNICODE编码支持后,告诉编译器,所使用的UNICODE,所以和楼主这里说赋值没什么关系。结构里面放什么都么关系,放类,放模板,结构就是一种数据类型的集合,自定义类型,没有什么好不好的。
      

  5.   

    这是完整代码
    typedef struct tagHandleAlert
    {
         CString szShowData[1000];            
    }HANDLE_ALERT;HANDLE_ALERT   g_HandleArea[1000]; BOOL CMapPlusView::AnalyzeData(CString szInfo,WORD wVehicleID)
    {
    int iloc1 = 2;
    int iloc2 = 0;
    int iLength = szInfo.Replace(",",",");
    iloc2=szInfo.Find(",", iloc1+1) != -1 ? szInfo.Find(",", iloc1) : szInfo.Find(";", iloc1);
    for(int i = 0; i <= iLength; i++)

    g_HandleArea[wVehicleID].szCarRuleData[i]=szInfo.Mid(iloc1, iloc2 - iloc1);// 错误是Debug Assertion failed! file:afx.inl line122  iloc1 = iloc2+1;
    iloc2 = szInfo.Find(",", iloc1+1) != -1 ? szInfo.Find(",", iloc1) : szInfo.Find(";", iloc1);
    }
    return true;
    }
      

  6.   

    跟一下你的代码,看iLength是否超过了1000
      

  7.   

    对于ASSERT错误有标准查找错误的方法的
    1. 找到assert报错的代码行(这里是afx.inl 122行)
    2. 找到那段源代码,这里是
    _AFX_INLINE CStringData* CString::GetData() const
    { ASSERT(m_pchData != NULL); return ((CStringData*)m_pchData)-1; }
    3. 根据错误代码猜测原因从错误代码看,这段代码出错是因为CString的一个私有数据被破坏了(m_pchData == NULL),而任何一个合法的CString对象,这个指针都不能为0一般情况下,这种错误都是因为内存访问越界导致的,报错的地方往往不是导致错误的地方,因此光从这段代码不一定看得出原因很不信,内存访问越界往往很难直接找到答案,需要走查代码、单步跟踪来找原因抱万一希望看了你的代码,觉得毫无问题。关键是你的这个数组是个全局变量,很可能在其他模块它就被破坏了。举个简单的例子,如果你曾经(只是瞎说的例子,不是真的你改变过这个)这样做memset(&g_HandleArea[0], 0, sizeof(g_HandleArea));这个错误必然出现
      

  8.   

    你是如何初始化的?莫非你又使用了memset?个人建议对struct的结构成员而言,尽量使用简单的数据类型。象string、CString之类的复杂数据类型还是保守使用为好。如果使用,引入C++结构的初始化构造函数、析构函数进行初始化和现场的析构清理工作。如果一旦使用了string、CString,就不要再使用memset进行初始化操作。