You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言访问数组末尾外首个元素的值不符合预期是什么原因?

问题原因分析
  • 你定义的char * strarray[] = {"first", "second", "third", "fourth", "fifth"};数组长度由初始化列表的元素个数决定,总共只有5个元素,合法访问的下标范围仅为0~4,访问strarray[5]、strarray[6]都属于数组越界访问,C语言标准明确规定这种行为属于未定义行为,运行结果没有任何通用性保证,完全取决于当前程序的内存布局。
  • 你以为strarray[5]是NULL,大概率是混淆了普通指针数组和带哨兵的指针数组的特性:只有你在初始化列表末尾显式添加NULL哨兵时,比如写成char * strarray[] = {"first", "second", "third", "fourth", "fifth", NULL};,下标为5的位置才会是NULL,C编译器不会自动给普通指针数组的末尾补NULL哨兵。
  • 你当前运行时看到strarray[6]为NULL,只是当前编译环境、栈内存布局下的巧合:该地址刚好存储了0值而已,换编译参数、运行环境都可能得到完全不同的结果,这种越界访问的结果不能作为任何逻辑的依据。

内容的提问来源于stack exchange,提问作者kprime21

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 22:39:00