U-Boot 发表于 2007-10-16 22:01

C语言问题,已解决!

学习C的过程中又遇到了一个问题,请指教
我定义了一个字符串集合, 请问该如何检测里面有多少个字符串呢?

static char *opcode[] = {"addlw","addwf","andlw","andwf","bcf","bsf","btfsc","btfss","call,""clrf","clrw","clrwdt","comf","decf","decfsz","goto","incf","incfsz","iorlw","iorwf","movf","movlw","movwf","nop","retfie","retlw","return","rrf","rlf","subwf","sleep","sublw","xorlw","xorwf" };

下面是我自己编的程序,编译的时候显示没有语法错误,但运行后就会出现系统错误而中断编译。
int main(void)
{
       int i;
   int zahl = 0;

    for(i=0; (int)strlen(opcode[ i ]) != 0;i++)
    {
       printf("%s\n",opcode[ i ]);
       zahl = i;
   }
   printf("%d\n",zahl);
       return 0;
}

我知道问题出在这个语句上 (int)strlen(opcode[ i ]) != 0
因为如果把这句换成比如 i<20 之类的边界条件,程序都能正常运行。
程序中断是不是因为当检测完集合里最后一个元素 "xorwf"之后,下一次运行出现了溢出呢?
我应该如何改写程序呢?

[ 本帖最后由 U-Boot 于 2007-10-17 09:03 编辑 ]

fiona_chen 发表于 2007-10-16 22:11

诶~~对字符串最没辙了。。。
完全瞎说的意见,我只是好奇,你的opcode不用加下标吗?
opcode这样?

U-Boot 发表于 2007-10-16 22:19

回复 #2 fiona_chen 的帖子

程序里的opcode加下标的,不知道为什么网页上显示不出来,刚刚在下标的地方加了空格才能显示出来。

U-Boot 发表于 2007-10-17 08:03

解决了, :D
sizeof(opcode) / sizeof(opcode);
页: [1]
查看完整版本: C语言问题,已解决!