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

C语言二维不定数组求字节大小及遍历元素的代码问题排查

问题分析与修正方案

你的代码存在两个核心问题,导致输出乱码且无法正常打印数组大小:

1. 外层循环条件错误

for (i = 0; list_ch[i] != '\0'; i++) 这个条件完全不成立:

  • 类型不匹配:list_ch[i] 是指向长度为2的char数组的指针,而'\0'是char类型,两者无法直接比较。
  • 数组无终止符:你初始化的静态二维数组末尾不会自动添加'\0',循环会一直越界访问数组之外的内存,导致输出乱码,且循环无法正常结束,后续的printf("%d", size)根本不会执行。

2. 手动计数总字节数的方式冗余且依赖错误循环

C语言中可以直接通过sizeof(list_ch)获取整个数组的总字节数,这是编译器在编译阶段就能计算出的准确值,不需要手动遍历计数。


修正后的代码

#include <stdio.h>

int main() {
    char list_ch[][2] = {
        {'1', 'a'},
        {'2', 'b'},
        {'3', 'c'},
        {'4', 'd'},
        {'5', 'e'},
        {'6', 'f'}
    };
    // 计算数组的行数:总字节数 ÷ 单个子数组的字节数
    int row_count = sizeof(list_ch) / sizeof(list_ch[0]);
    // 直接获取数组总字节数
    int total_bytes = sizeof(list_ch);

    // 遍历打印所有元素
    for (int i = 0; i < row_count; i++) {
        for (int k = 0; k < 2; k++) {
            printf("%c ", list_ch[i][k]);
        }
        printf("\n"); // 换行让输出更清晰
    }

    printf("数组总字节数:%d\n", total_bytes);
    return 0;
}

修正说明

  • 用sizeof计算行数,确保循环只遍历数组内的有效元素,避免越界访问。
  • 直接使用sizeof(list_ch)获取总字节数,这是最可靠的方式,不受数组元素内容影响。
  • 调整循环为固定次数遍历,彻底解决越界问题,保证程序能正常执行到打印总字节数的步骤。

内容的提问来源于stack exchange,提问作者Valerii Lamm

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 23:35:22