OHHHxxxx 2024-01-11 16:05 采纳率: 60%
浏览 248
已结题

C语言--定义数组显示:error C2466: 不能分配常量大小为 0 的数组。


int nums[] = { 1,2,3,4 };
    int z = sizeof(nums) / sizeof(nums[0]);
    int nas[z] = {0};
    int i = 0;

我用的是VS 2022编辑器,在对数组初始化的时候,nas[z]的z下面一直有红色波浪线,显示错误;运行结果显示:error C2057: 应输入常量表达式、 error C2466: 不能分配常量大小为 0 的数组。
请问为什么初始化数组的大小不能是个已知大小的字母,必须是数字。我知道的是 初始化数组大小必须是数组,是因为要开辟对应的空间来存储数组。
请问有什么办法能让程序里面的nas[z]的z不报错,或者初始化的数组大小不再是一个数组。

  • 写回答

5条回答 默认 最新

  • mlem_init 2024-01-11 16:10
    关注

    c语言是不支持可变数组的,c要求定义数组时,在编译前要已知其大小,但你这种是运行时才知大小。如果用c写,可以定义一个指针,用malloc申请内存来达到类似的效果。
    或者使用c++,它支持可变数组
    下面说个用c的方法

    #include <stdio.h>  
    #include <stdlib.h>  
      
    int main() {  
        int size;  
        printf("请输入数组的大小: ");  
        scanf("%d", &size);  
      
        // 使用malloc动态分配内存  
        int *array = (int *)malloc(size * sizeof(int));  
        if (array == NULL) {  
            printf("内存分配失败!\n");  
            return 1;  
        }  
      
        // 用户可以向数组中输入数据  
        printf("请输入数组的元素(输入0结束):\n");  
        int element;  
        while (1) {  
            scanf("%d", &element);  
            if (element == 0) {  
                break;  
            }  
            array[size - 1] = element;  // 将元素添加到数组的末尾  
            size--;  // 数组大小减一,因为下一个元素将覆盖当前最后一个元素  
        }  
      
        // 打印数组中的元素  
        printf("数组中的元素:\n");  
        for (int i = 0; i < size; i++) {  
            printf("%d ", array[i]);  
        }  
        printf("\n");  
      
        // 释放内存  
        free(array);  
      
        return 0;  
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 1月19日
  • 已采纳回答 1月11日
  • 创建了问题 1月11日