这是怎么回事,想不通? 在用mscomm控件实现串口通信时,我在头文件中定义了一个数组int a[20]。然后在构造函数中对这个数组初始化。在OnComm中一个一个调用这个数组时却不是这个数组中的数,传出的是:-842150451。但是传整数时却可以。这是怎么回事?如果要调用这个OnComm事件外的数组a[20]该如何做? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 肯定是代码有问题。把相关代码帖出来。如何定义的,如何初始化的,OnComm中如何调用的都贴出来。 我是这样写的头文件:public: CMSComm m_MSComm; int m_nIndex; int a[100]; virtual ~CSdmsView();构造函数:CSdmsView::CSdmsView(){ // TODO: add construction code here m_nIndex=1; int i; int I=0; int a[100]={0}; int num[2]={0}; srand((unsigned)time(NULL)); for(i=1;i<=100;i++) { if(i%100) { if(num[1]<(27+(((i%400)<=100&&(i%400!=0))?0:1))) { if(!a[I=(rand()%100)+(i/100)*100]) { a[I]=35; ++num[1]; } else { i--; continue; } } } else { num[1]=0; continue; } } for(i=1;i<=100;i++) { if(i%100) { if(num[2]<10) { if(!a[I=(rand()%100)+(i/100)*100]) { flag[I]=45; ++num[2]; } else { i--; continue; } } }}OnComm响应函数:void CSdmsView::OnComm(){ VARIANT variant_inp; COleSafeArray safearray_inp; LONG len,k; BYTE rxdata[2048]; CString strtemp; CString strDisp;if(m_MSComm.GetCommEvent()==2) { variant_inp=m_MSComm.GetInput(); safearray_inp=variant_inp; len=safearray_inp.GetOneDimSize(); for(k=0;k<len;k++) safearray_inp.GetElement(&k,rxdata+k); for(k=0;k<len;k++) { BYTE bt=*(char*)(rxdata+k); strtemp.Format("%c",bt); }if(strtemp=="1"){ strDisp.Format("%d",a[m_nIndex]); m_nIndex++; m_MSComm.SetOutput(COleVariant(strDisp));} }} CSdmsView::CSdmsView(){ int a[100]={0};}a[100]重复定义,所以函数里对a[100]的赋值并没有赋值到成员变量的a[100]中 int a[100]={0};---> for (int i = 0; i < 100; i++) a[i] = 0; 把构造函数里面:int a[100]={0};改成 for (int i = 0; i < 100; i++) a[i] = 0; int a[100]={0};--->memset(&a,0,sizeof(a)); 如何写一个VPN拨号器? 怎样根据指定的图片文件大小,缩放jpg图片? 寻找可以滚动文字的CStatic控件 如何得到CFormView类指针? 【高分求助】菜鸟学VC………… 怎样在写文件时在文件的最后一行开始写,而不是覆盖以前的内容? [求助]输入用户名有效性判断 请问用vc++的朋友,你们用来开发什么类型的程序?谢谢! 么用 VC 来获得指定进程的标识符? 如何在VC6中使用ATL的ATL::CStringA等? wmf文件到CBitmap 我在画图的时候用Ellipse函数画同心圆,结果半径大的总会覆盖掉小的,有什么办法?(顺序是先画小圆后画大圆)
头文件:
public:
CMSComm m_MSComm;
int m_nIndex;
int a[100];
virtual ~CSdmsView();
构造函数:
CSdmsView::CSdmsView()
{
// TODO: add construction code here
m_nIndex=1;
int i;
int I=0;
int a[100]={0};
int num[2]={0}; srand((unsigned)time(NULL)); for(i=1;i<=100;i++)
{
if(i%100)
{
if(num[1]<(27+(((i%400)<=100&&(i%400!=0))?0:1)))
{
if(!a[I=(rand()%100)+(i/100)*100])
{
a[I]=35;
++num[1];
}
else
{
i--;
continue;
}
}
}
else
{
num[1]=0;
continue;
}
}
for(i=1;i<=100;i++)
{
if(i%100)
{
if(num[2]<10)
{
if(!a[I=(rand()%100)+(i/100)*100])
{
flag[I]=45;
++num[2];
}
else
{
i--;
continue;
}
}
}
}
OnComm响应函数:
void CSdmsView::OnComm()
{
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[2048];
CString strtemp;
CString strDisp;if(m_MSComm.GetCommEvent()==2)
{
variant_inp=m_MSComm.GetInput();
safearray_inp=variant_inp;
len=safearray_inp.GetOneDimSize();
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);
for(k=0;k<len;k++)
{
BYTE bt=*(char*)(rxdata+k);
strtemp.Format("%c",bt);
}
if(strtemp=="1")
{
strDisp.Format("%d",a[m_nIndex]);
m_nIndex++;
m_MSComm.SetOutput(COleVariant(strDisp));
}
}
}
{
int a[100]={0};
}
a[100]重复定义,所以函数里对a[100]的赋值并没有赋值到成员变量的a[100]中
a[i] = 0;
改成
for (int i = 0; i < 100; i++)
a[i] = 0;
memset(&a,0,sizeof(a));