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
相关产品推荐
相关产品推荐

