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

C语言二维数组拷贝到另一二维数组时输出不符合预期问题排查

问题根因

原代码存在两处核心错误:

  • 数组越界访问:numbers 数组列数为8,合法列索引范围是07,原代码内层循环`j`的取值范围是015,当j>=8时访问numbers[i][j]属于越界操作。C语言二维数组按行连续存储,越界访问时会自动读取后续行的偏移数据,比如numbers[0][8]实际读取的是numbers[1][0]的值,这就是第二组输出为2、3、4的直接原因。
  • 数据来源逻辑错误:原逻辑没有区分output数组前后8行的数据源,期望需求中前8行对应numbers的0、1、2行,后8行对应numbers的3、4、5行,原逻辑未做偏移处理。
修正后代码
int main(){
    int numbers[6][8] = {
        {1,1,1,1,1,1,1,1},//0
        {2,2,2,2,2,2,2,2},//1
        {3,3,3,3,3,3,3,3},//2
        {4,4,4,4,4,4,4,4},//3
        {5,5,5,5,5,5,5,5},//4
        {6,6,6,6,6,6,6,6} //5
    };
    int output[2*8][3]; 
    
    for(int j = 0; j < 2*8; j++){
        int num_col = j % 8;
        // 前8行取numbers前3行,后8行取numbers后3行
        int row_offset = j < 8 ? 0 : 3;
        for(int i = 0; i < 3; i++){
            output[j][i] = numbers[i + row_offset][num_col];         
        }
    }  

    for(int j = 0; j < 2*8; j++){
        for(int i = 0; i < 3; i++){
            printf("%d ", output[j][i]);
        }
        printf("\n");
    }
}
输出验证

运行修正后代码即可得到期望结果:前8行输出1 2 3 ,后8行输出4 5 6 。

内容的提问来源于stack exchange,提问作者Duno。

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 23:09:03