着急?结构体赋值问题??? typedef struct aa{ CString a[10];}bb;bb cc[10];cc[1].a[1]="tt"; //为什么这样赋值出错误啊 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 typedef struct aa { CString a[10]; }bb; bb cc[10]; cc[1].a[1]= _T("tt"); ? 没错。你那里出什么错?贴出来。我测试如下:#include "afx.h"int main(){ typedef struct aa { CString a[10]; }bb; bb cc[10]; cc[1].a[1]="tt"; //为什么这样赋值出错误啊 }//VC6,setting中设置了使用MFC 还是不行 还是说AFX.in只类的错误 _T这个宏只是UNICODE编码支持后,告诉编译器,所使用的UNICODE,所以和楼主这里说赋值没什么关系。结构里面放什么都么关系,放类,放模板,结构就是一种数据类型的集合,自定义类型,没有什么好不好的。 这是完整代码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;} 跟一下你的代码,看iLength是否超过了1000 对于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));这个错误必然出现 你是如何初始化的?莫非你又使用了memset?个人建议对struct的结构成员而言,尽量使用简单的数据类型。象string、CString之类的复杂数据类型还是保守使用为好。如果使用,引入C++结构的初始化构造函数、析构函数进行初始化和现场的析构清理工作。如果一旦使用了string、CString,就不要再使用memset进行初始化操作。 请教一个在对话框加滑动条的问题 进程内核对象计数问题 怎样得到汉字的Unicode码啊?有专门的转换函数的吗? 今天郁闷,被老板骂,散100分,顺便问一个问题。 急!为啥我在编写自定义COM组件中使用swprintf,和wcstombs等涵数出错. 救命!帮忙毕业!VC制作rpg游戏 stone 关于Com和C/C++的交互问题 用intrabob调试。。。。。 C++ MFC 如何将字节集转换成图片文件保存 资源无法自动定义 救命啊, 碰到了一个很诡异的问题,关于Navigate2访问的
typedef struct aa
{
CString a[10];
}bb;
bb cc[10];
cc[1].a[1]= _T("tt");
#include "afx.h"int main()
{ typedef struct aa
{
CString a[10];
}bb;
bb cc[10]; cc[1].a[1]="tt"; //为什么这样赋值出错误啊 }
//VC6,setting中设置了使用MFC
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;
}
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));这个错误必然出现