精通各个软件卸载! 2021-01-09 19:25 采纳率: 50%
浏览 8
已采纳

C语言 新手程序出现错误

void main()
{
	int x[]={85,75,27,40,65,98,74,89,12,5,46,97,13,69,52,26,19,92};
	int *p;
	int i=0,j=0;
	for(i=0;x[i]!=0;i++)
	{
		j+=1;
		printf("%d\t",x[i]);
	 } 
	printf("\n");
	printf("%d",j);
}
  

不知道为什么记数结果是21,,搞不明白

  • 写回答

7条回答 默认 最新

  • include_iostream_ 2021-01-09 19:51
    关注

    补充一点:从做法上看,你好像认为数组之外自然会以0结尾,这种想法完全不正确。事实上,在经典的C语言进程内存区组织结构中,数组之后紧跟的应当是其他栈内容。栈上的内容一般与函数调用的保存现场、跳转逻辑和局部变量有关,这个特性使得栈溢出攻击成为可能。如果数组后紧随的是跳转逻辑用到的地址,就能发动控制流劫持(control flow hijacking)。如果数组后紧随的是局部变量,就可能被利用来窃取敏感数据。因此,试图利用局部数组上越界的部分,实际上是极度危险的操作,任何现代公司都几乎不可能允许技术人员这样做。

    顺便一提,一个常见的误解是“未分配的空间上值默认为0”,这个想法也是完全错误的。未分配的空间上可以是任何值。对于malloc获取的空间,也不会有初始化。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(6条)

报告相同问题?

悬赏问题

  • ¥15 运动想象脑电信号数据集.vhdr
  • ¥15 三因素重复测量数据R语句编写,不存在交互作用
  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目