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

为何我的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 13:40:55