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
相关产品推荐
相关产品推荐

