大一刚刚接触c,今天突然遇到了一个问题。
我用循环向数组输入后不能用sizeof得到数组长度,但直接初始化的就没有问题。
请大佬们救救孩子吧,谢谢大佬(
问题的核心代码如下:
#include<stdio.h>
int main()
{
int i = 0, a[] = { 0 }, b[] = { 1,2,3 };//定义变量、数组
while (1)
{
scanf("%d", &a[i]);
if (getchar() == 10) break;
i++;
}//使用循环输入1 2 3
printf("%d\n", sizeof(a) / sizeof(a[0]));//输出为1
printf("%d", sizeof(b) / sizeof(b[0]));//输出为3
return 0;
}
数组的长度是在定义的时候确定的,之后不会再变化。
你的程序里,
a
的长度是 1 ,b
的长度是 3 。a
的长度并不会因为向a[1]
,a[2]
中写了数据而变长。其实,这里向a[1]
中写数据已经发生了内存越界,在 C 里这叫做未定义行为,意思是语言规范无法保证程序的结果,或者说,程序可能出现任何结果。任何结果包括程序“正常”运行,崩溃,输出“错误”结果,等等。