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

C语言三维char字符串数组访问:为何printf输出拼接字符串而非单个值

问题原因
  • C 语言中字符串以\0(空终止符)作为结束标记,printf的%s格式符会从传入的起始地址开始逐个读取字符,直到遇到\0才会停止输出。
  • 你声明的三维数组为char x[3][3][3],第三维的长度仅为3,但你用来初始化的每个字符串字面量(比如"bat")本身包含3个可见字符,外加编译器自动添加的\0,总存储长度为4字节。因此初始化时末尾的\0会被截断,所有字符串内容在内存中连续排列,没有分隔用的空终止符。
  • 调用printf("%s\n", x[1][0])时,起始地址对应"bat"的首地址,由于没有\0终止,读取操作会继续向后遍历内存中相邻的"cat"、"hat"、"hit"等内容,直到碰巧遇到内存中其他位置的\0才停止,最终就输出了拼接后的长字符串。
修复方法
  • 方法一:调整数组第三维长度为4,预留空终止符的存储空间,将声明修改为char x[3][3][4],此时每个字符串都有合法的结束标记,打印就能得到预期的"bat"。
  • 方法二:如果确实需要保留第三维长度为3,打印时限制读取长度即可,将输出语句修改为printf("%.3s\n", x[1][0]),限定最多读取3个字符,也能输出单个目标字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 18:06:08