我制作了一个程序,该程序将使用两个数组,并将其放入一个函数中,该函数将比较两个数组的元素,并创建一个包含前两个元素的所有唯一元素的新数组。我的代码不带编译错误,并且当我运行代码时,我得到了正确的输出,但是在此之后,我在所有大小上得到了一堆额外的随机数。我不确定这是某种细分错误,还是其他原因。但是我不确定这个问题与什么有关,以及在哪里寻找解决方案。
#include <stdio.h>
void find_elements(int *a, int n1, int *b, int n2, int *c, int *size);
int main(){
int n1, n2;
int a[n1];
int b[n2];
int i;
int size=0;
printf("Enter the length of the first array: ");
scanf("%d", &n1);
printf("Enter the elements of the first array: ");
for(i=0; i<n1; i++)
scanf("%d", &a[i]);
printf("Enter the length of the second array: ");
scanf("%d", &n2);
printf("enter the elements of the second array: ");
for(i=0; i<n2; i++)
scanf("%d", &b[i]);
size = n1+n2;
int c[size];
find_elements(a, n1, b, n2, c, &size);
printf("Output: ");
for(i=0; i<(size); i++)
printf("%d ", c[i]);
return 0;
}
void find_elements(int *a, int n1, int *b, int n2, int *c, int *size){
int *p;
int *p1;
int i, j;
int count;
p=a;
for(i=0; i<n1; i++){
p1 = b;
for(j=0; j<n2; j++){
if(*p==*p1){
break;}
p1++;
}
if(j==n2){
*c=*p;
c++;
count++;
}
p++;
}
p=b;
for(i=0; i<n2; i++){
p1 = a;
for(j=0; j<n1; j++){
if(*p==*p1){
break;}
p1++;
}
if(j==n1){
*c=*p;
c++;
count++;
}
p++;
*size = count;
} }
我的代码的输入/输出示例:
输入第一个数组的长度:5
输入数组的元素:9 8 5 6 4
输入第二个数组的长度:4
输入数组的元素:6 9 7 1
输出:8 5 4 7 1
我得到了这个输出,但是除此之外我得到了:
输出:8 5 4 7 1 0 -1 0 0 0 740434312 60 0 0 4196006 0 6 7 9 1 9 8 5 6 4 0 4196528 65 4 5 -1 -1 1000611008 32764 -1 -1 1000610992 32764 8 0 1000610928 32764 4195408 43 0 0 4195408 0 0 0 746712
答案 0 :(得分:0)
代码的问题之一是顺序:
int n1, n2;
int a[n1];
int b[n2];
在程序开始时,未知的数组a
和b
分配了未初始化的值,即n1
和n2
。
另一个问题是int count;
中的find_elements
也未初始化。因此,输出参数size
的返回值是不确定的。
main
的内存更安全(不安全)版本可能看起来像:
int main() {
printf("Enter the length of the first array: ");
int n1;
scanf("%d", &n1);
int *a = (int*) malloc(sizeof(int) * n1);
printf("Enter the elements of the first array: ");
for (int i = 0; i < n1; i++)
scanf("%d", &a[i]);
printf("Enter the length of the second array: ");
int n2;
scanf("%d", &n2);
int*b=(int*)malloc(sizeof(int)*n2);
printf("enter the elements of the second array: ");
for (int i = 0; i < n2; i++)
scanf("%d", &b[i]);
int size = n1 + n2;
int *c = (int*)malloc(sizeof(int)* size);
find_elements(a, n1, b, n2, c, &size);
printf("Output: ");
for (int i = 0; i < (size); i++)
printf("%d ", c[i]);
free(c);
free(b);
free(a);
return 0;
}