解释这个程序
我好菜,这个都做不起~~~#include"stdio.h"
main()
{
int j=0,a[5],i=123456;
while(i)
{
a[j]=i%10;
i/=10;
j++;
}
for(j=0;j<6;j++)
printf("%d\n",a[j]);
}
这个的编译结果竟然是
6
5
4
3
2
5
为什么啊??请大家解释一下。
[此贴子已经被作者于2007-11-1 15:55:11编辑过]
搜索更多相关的解决方案:
include
----------------解决方案--------------------------------------------------------
在 TurboC环境下编译结果全错,上面的结果是在C++环境下编译的结果
----------------解决方案--------------------------------------------------------
数组a[5]最多能有5个元素.
----------------解决方案--------------------------------------------------------
虽然数组元素少了,应为a[6]。
但是程序原封不动,小弟在dev-c++上运行都不报错的,而且运行结果都对的。
有没高手解释一下啊
----------------解决方案--------------------------------------------------------
是没有抱错`````但是你是肯定越界了```你的a最多走到``a[4]``而a[4]的内存和a[5]是紧挨着的``这个时候防问a[5]出现
危险的可能行很小````因为你用的是循环加1``
因为你越界访问的内存没有危险``WINDOWS不回抱错``也不回禁止你的程序运行``虽然达到你的目的``
但是这样做是很要不得的```必须要改正``!!!!
----------------解决方案--------------------------------------------------------
惭愧惭愧~~~连数组少定义一个都没注意到。
----------------解决方案--------------------------------------------------------
4楼你真牛~~
----------------解决方案--------------------------------------------------------
在TC里,这个I溢出了,为-1761,因为TC的编释系统INT型为-32768->32767
而在C_FREE 里可以的,输出为
6
5
4
3
2
1
因为C_FREE里一个INT型为4个字节
也许是编辑器的问题吧
----------------解决方案--------------------------------------------------------
是啊,我在Turbo C里编译就是错的。但是在Visual C++中编译就是正确的。晕死~~
----------------解决方案--------------------------------------------------------
我同意8楼的,应该是益处了,在TC里面int 占2个字节,表示的最大数为32767,在dec里面int 占4个字节,
你的i=123456明显越界了,所以在tc下全错撒!把i定义为long型的应该就可以了.
DEV上的结果错是因为你粗心把数组少定义一个,a[6]就行了....
----------------解决方案--------------------------------------------------------