我一直在学习C语言,偶然发现了这个练习:
给定这个二维无大小数组:
char list_ch[][2] = {
'1', 'a',
'2', 'b',
'3', 'c',
'4', 'd',
'5', 'e',
'6', 'f',
};
编写一个程序来计算数组所占用的总字节数,然后打印出数组的所有元素。
我尝试使用两个for
循环来完成它:
int main() {
char list_ch[][2] = {
'1', 'a',
'2', 'b',
'3', 'c',
'4', 'd',
'5', 'e',
'6', 'f'
};
int i;
int k;
int size = 0;
for (i = 0; list_ch[i] != '\0'; i++) {
for (k = 0; k < 2; k++) {
size++;
printf("%c ", list_ch[i][k]);
};
};
printf("%d", size);
return 0;
}
然而,程序打印了一长串不同的字符,并且没有打印大小。我做错了什么?
1条答案
按热度按时间holgip5t1#
list_ch[i] != '\0'
总是失败。这也是一个奇怪的错误编码,因为list_ch[i]
是一个1D数组,将一个数组与一个 null字符 * 进行比较意味着误解。list_ch[i]
作为一个 array,永远不会为0。 array * 的所有地址永远不会为0。(指针可以为0 -但这是另一回事)。最后,代码尝试访问超出数组边界的内容,导致 * 未定义行为 * UB。
使用
sizeof
来辨别2D数组属性。@William Pursell总字节数
尺寸
打印其所有元素