c用循环向数组输入后不能用sizeof得到数组长度?

大一刚刚接触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;
}
阅读 1.6k
1 个回答

数组的长度是在定义的时候确定的,之后不会再变化。

你的程序里,a 的长度是 1 ,b 的长度是 3 。

a 的长度并不会因为向 a[1], a[2] 中写了数据而变长。其实,这里向 a[1] 中写数据已经发生了内存越界,在 C 里这叫做未定义行为,意思是语言规范无法保证程序的结果,或者说,程序可能出现任何结果。任何结果包括程序“正常”运行,崩溃,输出“错误”结果,等等。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进