You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言有序数组去重代码报array size missing in ‘num’错误如何解决

报错具体原因
  • C语言中仅当数组声明同时伴随初始化操作时,才允许省略数组长度,由编译器根据初始化列表的元素个数自动推导长度。你单独写int num[];没有提供初始化值,编译器无法确定数组的内存分配大小,因此抛出「数组大小缺失」的错误。
  • C语言不支持数组的整体赋值操作,数组完成声明之后,不能再用num[] = {元素列表}的形式给数组批量赋值,这属于语法错误,因此第二个报错提示期望]前有表达式。
代码修改方案

首先解决编译报错:把main函数里数组的声明和初始化合并为一行即可。另外你当前的去重函数还存在逻辑错误:temp[j++]=arr[n-1];这行写在for循环内部,会导致每次循环都重复插入最后一个元素,最终输出结果异常,需要把这行移到for循环外面。

完整修复后的代码如下:

#include <stdio.h>

int removeduplicates(int arr[],int n){
    int j=0;
    int temp[15];
    if(n==0 || n==1){
         return n;
    }

    for(int i=0;i<n-1;i++){
        if(arr[i]!=arr[i+1]){
            temp[j++]=arr[i];
        }
    }
    // 插入最后一个元素的逻辑移到循环外
    temp[j++]=arr[n-1];

    for(int i=0;i<j;i++){
         arr[i]=temp[i];
    }
    return j;
}

int main(){
    int n;
    // 合并声明和初始化,编译器自动推导数组长度
    int num[] = {1,2,3,3,4,4,5,5,5};
    n= sizeof(num)/sizeof(num[0]);

    n=removeduplicates(num,n);
    printf("去重后元素个数:%d\n元素为:",n);
    for(int i=0;i<n;i++){
        printf("%d ", num[i]);
    }
    return 0;
}

修改后运行可得到正确结果:去重后元素个数为5,对应元素为1 2 3 4 5。

内容的提问来源于stack exchange,提问作者Noob_coder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 01:06:04