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

C语言中指定字符串存储数组长度的作用是什么?

现象本质说明

你观察到的“输入超出数组声明长度的字符串仍能正常输出”属于C语言中的未定义行为(Undefined Behavior, UB),只是当前运行环境下的偶然表现,完全不代表代码逻辑合法、安全。

你给出的示例代码本身存在两处不规范写法:

  1. 存储字符串应使用char类型数组,而非int类型数组:32/64位系统中int通常占4字节,因此你声明的int c[4]实际分配了16字节的连续内存空间,刚好可以容纳ABCDE加末尾的\0字符串结束符,因此暂时没有触发明显异常。
  2. 使用scanf("%s", 地址)读取字符串时没有限制写入长度,本身就是高危写法,极易触发缓冲区溢出问题。

声明数组长度的核心意义

  • 编译器/操作系统会按照你声明的数组长度,为你分配对应大小的合法可访问连续内存空间,超出这个长度的内存区域你没有合法的访问权限。
  • 数组长度是你控制内存访问边界的核心依据:如果写入内容超出了数组的合法长度,就会覆盖其他内存区域的数据,轻则篡改程序其他变量的值、输出乱码,重则触发段错误直接终止程序,甚至被利用执行恶意代码。
  • 正确的字符串读取写法需要匹配数组长度做限制,例如你声明char c[5];(最多存4个可见字符加1个结束符),对应的安全输入写法为scanf("%4s", c);,避免越界写入。

内容的提问来源于stack exchange,提问作者Yogesh Singh Rawat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 06:45:03