C语言数组代码中循环变量stop显示计数不匹配问题排查求助
问题原因
- 数组越界写入:你定义的
num数组长度为MAX_SIZE,合法访问下标范围是0到MAX_SIZE - 1,代码中把用户输入的数组长度写入&num[MAX_SIZE]属于数组越界操作,是C语言中的未定义行为,不仅会导致存储的长度值异常,还可能破坏栈上其他数据。 - 提示语输出变量错误:你需要展示的是当前输入的序号(1到用户输入的长度值),但代码中
printf输出的是未初始化的num[stop],数组刚定义时内部是内存中的随机垃圾值,自然无法输出预期的顺序序号。 - 额外问题:
void main不是C语言标准推荐的主函数写法,标准写法主函数返回值为int类型。
修复方案
修改思路:
- 单独声明一个整型变量存储用户输入的数组长度,避免数组越界
- 将提示语中的输出值改为循环计数器
stop + 1,匹配1~N的序号展示要求 - 增加输入长度合法性校验,避免用户输入的长度超过数组最大容量导致后续写入越界
- 修正主函数写法为标准
int main格式
修复后代码:
#include <stdlib.h> #include <stdio.h> #include <stddef.h> #define MAX_SIZE 1000 int main(){ int num[MAX_SIZE]; int arr_len; // 单独存储用户输入的数组长度 printf("Input number of integers in the array: "); scanf("%d", &arr_len); // 边界校验,避免非法长度输入 if (arr_len > MAX_SIZE || arr_len <= 0) { printf("Invalid array length, should be between 1 and %d", MAX_SIZE); return 1; } for(size_t stop=0; stop < arr_len; stop++){ printf("\nInput numbers for array %d: ", (int)(stop + 1)); // 输出1开始的序号 scanf("%d", &num[stop]); } return 0; }
内容的提问来源于stack exchange,提问作者clownzxy
相关产品推荐
相关产品推荐

