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

C语言char数组定义为2却输出多字符,grade与mark列内容混叠求助

问题定位与解决方案

核心原因

你在struct data里定义的grade是长度为2的char数组,但像"B+"这类双字符等级标识,加上C语言字符串必须的**终止符'\0'**一共需要3个字节的存储空间。数组长度不足会导致字符串无法正确终止,输出时会越界读取后续mark成员的内存内容,从而出现两列内容混叠的情况。而单字符等级(如"A")刚好能在第二个数组位置存放'\0',所以这类行不会出现异常,这就是问题只在部分行出现的原因。

修复方案

  1. 调整grade的数组大小为3,预留出终止符的位置:
struct data {
    // 其他成员保持不变
    char grade[3]; // 从[2]改为[3]
    float mark;
};
  1. 确保赋值时使用标准字符串操作函数(比如strcpy),这类函数会自动在字符串末尾添加'\0'。如果是手动赋值单个字符,记得手动设置终止符:
// 示例:手动赋值单字符等级时
data[i].grade[0] = 'A';
data[i].grade[1] = '\0'; // 手动添加终止符

验证提示

修改后可以检查所有行的输出,双字符等级(如"B+"、"C-")的输出会正常终止,不会再和mark内容混叠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 23:27:46