使用VC++写C程序时遇到一个不明白的问题

熬夜王者 2005-04-01 03:18:34
为什么超出下标了还是正常~~而当超出一定范围了就又不正常了???


#include<stdio.h>
void main()
{
char x[5];
scanf("%s",x); /*输入12345678正常,输入123456789错误(出现调试窗口)*/
printf("%c,%c,%c,%c,%c,%c,%c,%c\n",x[0],x[1],x[2],x[3],x[4],x[5],x[6],x[7]);
printf("%d,%d,%d,%d,%d,%d,%d,%d\n",x[0],x[1],x[2],x[3],x[4],x[5],x[6],x[7]);
printf("%d,%d,%d,%d,%d,%d,%d,%d\n",x,x+1,x+2,x+3,x+4,x+5,x+6,x+7);
/*以下以下字符串经过测试:
x[5]改成x[2],允许输入1234。 4个字符
x[5]改成x[9],允许输入123456789012。 12个字符
x[5]改成x[8],瞒好~正常了允许输入12345678。 8个字符
*/
}
...全文
109 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
熬夜王者 2005-04-01
  • 打赏
  • 举报
回复
skywgs(浪迹天涯)

谢谢啦~~我把分给你们结了~~~
熬夜王者 2005-04-01
  • 打赏
  • 举报
回复
saintl(shengliang)

EmbraceTM()

哦~~~是这样啊......谢谢你们二位前辈啦~自学了3个礼拜听了4天课......书上没见过,ACCP的老师从来也没和我说过.......以后要多来请教大家咯~~ ^-^
skywgs 2005-04-01
  • 打赏
  • 举报
回复
曾经有过的,但对指针及内存管理了解后就知道了:有时候错误的程序也能得到“正确的结果”?!

但还是不要这样用,其结果是不确定的,之所以你得到了正确的答案,是因为内存没被其他程序改变。
let5flying 2005-04-01
  • 打赏
  • 举报
回复
有想法。。。有发展
jk88811 2005-04-01
  • 打赏
  • 举报
回复
后果很严重

我一点也不生气

// 呵呵
saintl 2005-04-01
  • 打赏
  • 举报
回复
c语言中有字节对齐一说,一般默认是8字节对齐,所以即使你写了char x[5];但是实际上内存中开辟了8字节的空间,就算你在x的后面再加一个变量,那个变量也是在x的后面8字节,所以你实际可以用的字节就为8,但是这样做非常危险,在c语言中属于内存越界,是应该严厉禁止、解决杜绝的!
EmbraceTM 2005-04-01
  • 打赏
  • 举报
回复
二年前我也问过一个这样的问题!
有人给我说“人家以为你已经不是小孩了”!

你硬要用不是你的地方,虽然可能有时候会正确!
但是 “后果很严重”@@@
szws 2005-04-01
  • 打赏
  • 举报
回复
虽然表面上能得到正确的结果,但万万不能这样做。
熬夜王者 2005-04-01
  • 打赏
  • 举报
回复
我就是不知道才来请教的......我刚开始学~~
CMyMfc 2005-04-01
  • 打赏
  • 举报
回复
什么叫正常, 什么叫不正常??
难道写出错误代码, 错误的得出的预期结果才是正常?
pcboyxhy 2005-04-01
  • 打赏
  • 举报
回复
这样做是危险的
至于能用多少
是不确定的
要看你当时的内存使用情况

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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