gpt4 book ai didi

c - c 中处理 scanf 的段错误

转载 作者:太空宇宙 更新时间:2023-11-04 08:17:04 27 4
gpt4 key购买 nike

我正在编写一个程序,要求我执行两个数组的并集。到目前为止,这是我的代码。输入集合 A 后,我收到 Segmentation fault 作为错误。

#include <stdio.h>

void Union(int a[], int b[], int set1, int set2)
{
int u[20], i, j, unionIndex=0,trigger;

for(i=0; i<set1; i++)
{
u[unionIndex] = a[i];
unionIndex++;
}

for(i=0; i<set2; i++)
{
trigger=0;
for(j =0; j<set1; j++)
{
if(b[i] == u[j])
{
trigger =1;
break;
}
}
if(trigger =0)
{
u[unionIndex]=b[i];
unionIndex++;
}
}

for(i=0;i<unionIndex;unionIndex++)
{
printf(" %d",u[i]);
}
}

int main(void) {
int N=0;
int M=0;
int i;
int j;

printf("Please enter the number of elements in set A: ");
scanf("%d",N );
int a[N];

printf("Enter the numbers in set: ");
for(i=0;i<N;i++)
{
scanf("%d",&a[i]);
}

printf("Please enter the number of elements in set B: ");
scanf("%d",M );
int b[M];

printf("Enter the numbers in set: ");
for(j=0;i<M;i++)
{
scanf("%d",&b[i]);
}

Union(a,b,N,M);
return 0;
}

我很确定这个问题与数组有关,因为程序可以编译,但我在用户输入集合 A 后立即收到错误。我是 C 的初学者,但我对 Java 了解更多,所以我认为这与内存分配有关。我不太确定如何解决这个问题,所以如果你能给我指出正确的方向,那将会很有帮助。

最佳答案

您需要将变量的地址传递给scanf()

改变

printf("Please enter the number of elements in set A: ");
scanf("%d",N );

printf("Please enter the number of elements in set A: ");
scanf("%d", &N);

其他地方也一样

printf("Please enter the number of elements in set B: ");
scanf("%d", &M);

还有一个可能的错误

在这里

for(j =0; j<set1; j++)
{
if(b[i] == u[j])

在这个set1中等于N,所以j将从0到N-1。而数组 u[] 只有 20 个元素。如果某些用户为 N 输入的值超过 20,则数组访问可能越界。

关于c - c 中处理 scanf 的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35230203/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com