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
相关产品推荐
相关产品推荐

