【发布时间】:2019-02-17 22:37:36
【问题描述】:
我编写了一个程序,该程序将采用两个数组,并将其放入一个函数中,该函数将比较两个数组的元素,并创建一个包含前两个数组中所有唯一元素的新数组。我的代码编译 w/o错误,当我运行代码时,我得到了正确的输出,但是之后我得到了一堆额外的随机数。我不确定这是某种分段错误还是其他原因。但我不确定这个问题与什么有关以及在哪里寻找解决方案。
#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 1060610992 32 1000610928 32764 4195408 43 0 0 4195408 0 0 0 746712
【问题讨论】:
-
我没有看到
count在任何地方初始化。您是否在启用所有警告的情况下进行编译? -
天哪,原来如此,谢谢。我将其设置为默认警告,在奇怪之前我已经收到了未初始化变量的警告。不过再次感谢您。