为何我的C语言循环无法从-5计数到19?求技术排查建议
问题排查与修复建议
核心错误点
- 数组索引逻辑完全错误:你在
aufgabe4里直接用循环变量i作为数组下标,但i从-5开始,负数索引会访问数组内存之外的非法区域(C语言数组下标只能从0开始),i到19时更是严重越界,这不仅得不到预期值,还会触发未定义行为。你要生成-5, -2, 1,...19的序列,应该用数组的合法下标,再计算对应位置的数值。 - 数组大小与参数不匹配:
data3定义为int data3[9],只有9个元素,但调用printArray时传了count=10,会超出数组范围读取无效数据。 - 变量未显式声明:三个函数里的
i都没声明int i;,属于C语言的隐式声明,写法不规范且易引发问题。 - 函数返回值缺失:
printArray和aufgabe4声明返回int,但函数内没有return语句,属于未定义行为。
修复后的代码示例
#include <stdio.h> // 修复:添加变量声明,改为无返回值类型 void printArray(int array[], int count){ for (int i = 0; i < count; i++) { printf("%d ", array[i]); } printf("\n"); } // 修复:生成目标序列,使用合法数组下标 void aufgabe4(int array[], int count){ int current = -5; for (int i = 0; i < count; i++) { array[i] = current; current += 3; } } int main (void){ printf("4.Aufgabe\n"); // 目标序列共9个元素,定义对应大小的数组 int data3[9] = {0}; aufgabe4(data3, 9); printArray(data3, 9); return 0; }
说明
- 修复后的
aufgabe4用current变量从-5起始,每次加3,依次填充数组的合法下标(0到8),刚好生成你预期的序列。 - 调整数组大小与传入的
count参数匹配,彻底避免越界问题。 - 将无需返回值的函数改为
void类型,写法更规范。
内容的提问来源于stack exchange,提问作者xDMG126
相关产品推荐
相关产品推荐

