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

C语言结构体数组代码输出异常:首个元素字符串打印错误原因咨询

为何第一个结构体条目打印字符串会连后续内容一起输出?

问题核心出在**C语言字符串的终止符'\0'**上,具体拆解如下:

  1. 先看你的结构体定义:
typedef struct
{
    int length;
    char structure[3][10]; // 每个字符串数组仅分配10字节空间
}STRUCTURE;
  1. 第一个条目里的第一个字符串是"llnnllnnnn",这个字符串本身包含10个字符。但C语言中字符串必须以'\0'作为结束标志,这个标志也需要占用1字节空间——也就是说,这个字符串实际需要11字节才能完整存储(10个字符+1个终止符),但你的数组只分配了10字节,导致'\0'被截断,没有空间存放。

  2. 当你用printf("%s")打印时,它会从字符串起始地址持续读取内存,直到找到'\0'才停止。因为第一个字符串末尾没有终止符,printf就会继续读取后面紧邻的structure[1]的内容,最终把两个字符串连在一起输出。

  3. 而第二个、第三个条目里的字符串不存在这个问题:

    • 第二个的字符串如"llnnlnnnn"是9个字符,加上'\0'刚好占10字节,能完整存进数组,printf读到终止符就停止,输出正常。
    • 第三个的字符串长度为8,同样有足够空间容纳终止符,所以输出也符合预期。

解决方法

修改结构体中的字符串数组大小,给终止符留足空间:

char structure[3][11];

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 11:55:28