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

C语言结构体打印异常求助:航班日志输出字段串连混乱

解决C语言结构体字符串打印串连的问题

问题根源

你的打印异常是**字符串缺少终止符'\0'**导致的:

  • 航班号flight_number定义为MAX_CODE=5,但"AI123"这类航班号刚好是5个字符,C语言字符串需要末尾的'\0'标记结束,数组长度不够时无法存储这个终止符。printf输出字符串时会从起始地址一直读到内存中第一个'\0',就会越界读取到相邻字段的内容,造成串连。
  • 同理,timings字段定义为char timings[5],"18:03"是5个字符,同样没有空间存储'\0',也会触发越界读取。

修复方案

修改头文件中宏定义和结构体字段的数组长度,给字符串终止符留出空间:

修正后的main.h代码

#ifndef MAIN_H
#define MAIN_H

//constant directives
#define MAX_FLIGHTS 5
#define MAX_CODE 6  // 原5改为6,容纳5个字符+'\0'

//structure declarations
typedef struct flight_data{
    char flight_number[MAX_CODE];
    char destination[100];  // 这个长度足够,无需修改
    char timings[6];        // 原5改为6,容纳5个字符+'\0'
}f_data;

//function declarations

#endif

验证效果

修改后重新编译运行,打印输出会恢复正常,符合预期:

These are the current flight logs
1. AI123   Mumbai      18:03
2. AA901   Panaji      13:45
3. ID111   New Delhi   14:00
4. FE102   Dubai       21:20
5. FE103   Sharjah     22:40

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 01:57:30