下面的语句的问题在哪?

streetballerym 2003-09-12 09:44:46
char lleny[13];


short GetNum(char *llen)
{
int i;
short a;
switch(llen[i])
{
case '1':
a=1;
break;
case '2':
a=2;
break;
case '3':
a=3;
break;
case '4':
a=4;
break;
case '5':
a=5;
break;
case '6':
a=6;
break;
case '7':
a=7;
break;
case '8':
a=8;
break;
case '9':
a=9;
break;
case '0':
a=0;
break;
}
return a;
}

Form1->a1=GetNum(lleny)*10+GetNum(lleny+1);
Form1->a2=GetNum(lleny+2)*10+GetNum(lleny+3);
Form1->a3=GetNum(lleny+4)*10+GetNum(lleny+5);
Form1->a4=GetNum(lleny+6)*10+GetNum(lleny+7);
Form1->a5=GetNum(lleny+8)*10+GetNum(lleny+9);
Form1->a6=GetNum(lleny+10)*10+GetNum(lleny+11);
目的是在Edit控件中读取一个字符串,放到数组lleny中,然后将其分解转换后,赋值。
程序很长,没有贴出来,发现就是贴出来的代码有错误,编译可以通过,但运行的时候出现以下错误:Access violation at address 00431f06 in module 'GEMS.exe'.Read of address 01c2a13e.

...全文
134 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
ThinkX 2003-09-12
  • 打赏
  • 举报
回复
变量a还没有初始值,如果输入不是'0'-'9',你会返回一个未知的值。

下面是另一个方法,

short GetNum(char c)
{
short t = (short)c;
if (t >= 48 && t <= 57)
return t - 48;

return -1; //error
}
streetballerym 2003-09-12
  • 打赏
  • 举报
回复
好了,问题解决了。
是没有初始化的问题。
COKING(疯间猖越),我是初学者,不要打击我。
烂的话,你就指点一下嘛,给分的哦。
zhpsam109 2003-09-12
  • 打赏
  • 举报
回复
!!!!!!!!!!!!!!!!!
COKING 2003-09-12
  • 打赏
  • 举报
回复
好烂的代码!
yejun52 2003-09-12
  • 打赏
  • 举报
回复
应该是Form1还没有初始化的问题,检查运行此代码时form1是否已经生成
wawxj 2003-09-12
  • 打赏
  • 举报
回复
我觉得你的函数可以调整一下:
short GetNum(char llen)
{
short a[10];
for(int i = 0;i < 10;++i)
a[i] = i;
if(llen=0 || llen=' ')//加上容错处理,根据你自己的实际情况去处理
llen = '0';
return a[llen - 48];
}
调用时这样处理:
Form1->a1=GetNum(*(lleny))*10+GetNum(*(lleny+1));//此句实际上等于:Form1->a1=GetNum(*(lleny+0))*10+GetNum(*(lleny+1));
Form1->a2=GetNum(*(lleny+2))*10+GetNum(*(lleny+3));
boat2002w 2003-09-12
  • 打赏
  • 举报
回复
同意楼上
lurel 2003-09-12
  • 打赏
  • 举报
回复
i没有初使值呀
fyje 2003-09-12
  • 打赏
  • 举报
回复
一般情况下,试图访问一个没有Create的实例,容易出现这类问题
你看一下,Form1已经Create了吗?
wawxj 2003-09-12
  • 打赏
  • 举报
回复
变量i没有赋初值。
supwjhuLoveCjj 2003-09-12
  • 打赏
  • 举报
回复
i 没有初值,
switch 没有对 非‘0’~‘9’处理
jishiping 2003-09-12
  • 打赏
  • 举报
回复
short GetNum(char *llen) 里面的switch,不用那么复杂吧。

switch(llen[i])
{
case '1':
a=1;
break;
case '2':
a=2;
break;
case '3':
a=3;
break;
case '4':
a=4;
break;
case '5':
a=5;
break;
case '6':
a=6;
break;
case '7':
a=7;
break;
case '8':
a=8;
break;
case '9':
a=9;
break;
case '0':
a=0;
break;
}

可以写成
a = llen[i] - '0';

最多也就是:
if (llen[i]>='0' && llen[i]<='9')
a = llen[i] - '0';
sunmedia 2003-09-12
  • 打赏
  • 举报
回复
i没有初值
Robin 2003-09-12
  • 打赏
  • 举报
回复
就是wawxj(海原)说的:
i没有初使值呀!
记着,在你写类的初始化的时候,尤其应该会注意这些问题!

多看别人的代码!
------------------------------------------
不过你的方法实在不好!效率极底!
dongyangzong 2003-09-12
  • 打赏
  • 举报
回复
不要打击初学者!!!

13,824

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧