c语言程序为什么运行一半就自动关闭了,C语言为什么程序运行一半就出现停止工作...

匿名用户

1级

2016-04-04 回答

有点儿意思。原因却出乎意料的简单。 char *rwtab[27]={"main","if","then","while","do"," static","int"," double","struct","break","else","long","switch","case","typedef","char","return","const","float","short","continue","for","void","sizeof","default","do"}; 少了一项,只有26项,rwtab[26]是空指针,访问到它时,就出错了。错误提示如下: 我没有修改这一句的时候,在你指出出错的地方加了下面一句: for(n=0;n<27;n++) if(strcmp(token,rwtab[n])==0)//比较是否关键字 { printf("Cathch a key-word\n"); // } 出错了,提示信息如下: 这意味着,访问了一个空指针。 修改如下: char *rwtab[27]={"main","if","then","while","do","static","int",\"double","struct","break","else","long","switch","case",\"typedef","char","return","const","float","short","continue",\"for","void","sizeof","default","do","long"};//数组少一项,没有27项,另外几个关键词前面有空格,也应该删除。 加了续行符号。修改之后,运行成功: 我用你的程序做a.txt,生成文件b.txt,c.txt,今天不知什么情况,不能上传。 为什么这样?很玄妙: rwtab数组少一项,rwtab[26]会引用一个空指针,产生错误。这儿没有语句时,循环没有实质性语句,编译程序优化, 不会编译这个循环的语句,程序中根本没有这几句的内容,因而不会出错。有了语句,就不能省略了,就出错了。 就是这样简单。 另外,你的程序必须当做C++程序编译,否则通不过。C不允许在有实质语句之后定义变量,变量说明要全部放到相应段的最前面,也不支持//注释。我是用DEVC++编译成功的,用WINTC编译失败。

追问:

有点儿意思,你这回答根本和我的问题根本就牛头不对马嘴,认真回答吧,答好了给你100分!!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值