我用C语言编写了一个函数,用于将所有素数从一个int数组复制到一个新的动态数组中,该数组将具有相同的大小。
这是功能:
int* cpy(int arr[], int size){
int* newArr = malloc(size * sizeof(int));
for (int i = 0; i < size; i++){
if (isPrime(arr[i])){
*(arr + i) = arr[i];
}
}
return newArr;
}
这是驱动程序代码
int arr[SIZE] = {129, 73, 87, 2, 923, 6743, 983, 23};
int* newArr = cpy(arr, SIZE);
printf("Question 4: ");
printIntArr(newArr);
free(newArr);
注意SIZE
是在我用来存储所有原型/宏的头文件中定义为20的宏
由于某种原因,我得到以下输出:
Question 4: 12261328 12255424 285212761 39925 33619971
我不明白我在做什么错。我是C语言的新手,对不起我的错误
编辑:我尝试了第一个评论解决方案,但得到了:
Question 4: 129 6684864 87 33150 923
您需要在循环中添加第二个索引:
如果不这样做,则将有一个数组,其内存中还有未初始化的值
示例:
输入:1 3 6 9 13输出:1 3 72742729 92652729 13原因:跳过了6和9,并留下了垃圾值。(因为我在智能手机上,所以我现在无法添加代码)