palmyang 2006-8-30 00:40
初学困惑,帮忙看看这段代码!!~~
一个程序里的一段,编译通过但无法运行,就是想在form里显示一个popTrigger和list的组合,让poptrigger在默认时显示list里的第一个item。
FormType *pForm;
ControlType *pControl2;
Boolean handled=false;
Char* Lslab;
switch (pEvent->eType) {
case frmOpenEvent:
pForm = FrmGetActiveForm();
pControl2=FrmGetobjectPtr(pForm,FrmGetobjectIndex(pForm,NewFormPopListTrigger));
Lslab=(Char*)CtlGetLabel(pControl2);
上面返回值赋值必须要强制转换类型嘛?CtlGetLabel返回的不就是字符串类型嘛??
StrCopy(Lslab,LstGetSelectionText(FrmGetobjectPtr(pForm,FrmGetobjectIndex(pForm,NewFormPopList)),0));
CtlSetLabel(pControl2,Lslab);
编译通过了,但是debug切换到这个form后,simulator就报错了,这时程序运行到上面CtlSetLabel,我这段代码是在书上学来的,书上根本就没有强制转换字符串类型,其它一模一样的结构,为什么我不行??
高手!!跪求解答!!!
keilc51 2006-8-31 16:33
将StrCopy那一句改为Lslab=LstGetSelectionText(...)试试,你的指针操作可能有问题,在StrCopy中的 Lslab可能是个空指针,没有分配到内存空间。
palmyang 2006-9-3 01:17
[quote]keilc51 写道:
将StrCopy那一句改为Lslab=LstGetSelectionText(...)试试,你的指针操作可能有问题,在StrCopy中的 Lslab可能是个空指针,没有分配到内存空间。
[/quote]
前面不是已经给Lslab赋过值了嘛。Lslab=CtlGetLabel(pControl2);怎么可能是空指针呢?书上说不要这样Lslab=LstGetSelectionText(...)赋值,因为LstGetSelectionText()返回的也是一个指针,这样会改变Lslab指向的地址。
keilc51 2006-9-4 16:51
不知你试过了没有?如果你的pControl2控件最初并没有设置Label,那你用Lslab=CtlGetLabel(pControl2)语句得到的就是一个NULL指针;
wwhheerree 2006-9-4 18:21
Lslab指向字符串,Lslab=CtlGetLabel(pControl2)后其指向Trigger的当前字符串,并没有实际分配空间,所以用strcopy无法复制字符串到Lslab指向的地址,因为Lslab没有分配空间,所以还是应该用Lslab=LstGetSelectionText(...)试试看~~~
Greenland 2006-9-28 16:29
动态分配内存空间
Char* Lslab;
在定义一个字符型指针变量后,还要为其申请空间,才能真正利用它
const UInt32 maxCharLen = 32; //可以更改大小.
Char* Lslab;
Lslab = new Char [maxCharLen];
...
再加入刚才的函数
...
最后不要忘记
delete [] Lslab;
否则,可就有内存泄露了。
palmyang 2006-10-24 01:39
问题已经解决了,感觉pods真不好用!!