我在函数调用点遇到分段错误。请帮助任何信息。我是编码的新手,所以你看到的其他任何帮助都会非常感激!分段错误发生在' main'功能
#include<stdio.h>
#include<stdlib.h>
#define MAX 100
void write();
void read();
int main()
{
int x;
while(x!=2)
{
printf("Type 0 to go to write program, type 1 to go to read program, type 2 to end program\n");
scanf("%d",x);
if(x==0)
write();
if(x==1)
read();
}
return 0;
}
void write()
{
FILE *finalptr;
char name[MAX],gift[MAX];
int none;
if((finalptr=fopen("names.dat","w"))==NULL)
{
printf("File could not be opened\n");
}
else
{
printf("Enter the gifter's name2gift.\n");
printf("Enter EOF to end input.\n");
printf("? ");
scanf("%s%d%s",name,none,gift);
while(!feof(stdin))
{
fprintf(finalptr,"%s %s\n",name,gift);
printf("? ");
scanf("%s%d%s",name,none,gift);
}
fclose(finalptr);
}
}
答案 0 :(得分:3)
scanf("%d",&x);
读取变量的地址。哪个&x
不是x。
由于你有%d
作为scanf()的第一个论点,第二个参数应该是一个有效的内存位置(int *
),应该读取值,在你的情况下x
未初始化或x
未指向任何有效的内存位置,这将导致分段错误。
修复所有scanf()'s
PS:使用未初始化的值将导致UB(值x
未初始化且正在使用)
答案 1 :(得分:2)
scanf("%d",x);
scanf
d
转化说明符需要int *
类型的参数,但您传递的是int
。将此调用更改为scanf("%d", &x);
您在其他scanf
来电中遇到同样的问题。
答案 2 :(得分:1)
您将x
声明为整数,因此在scanf
中您必须&
:scanf("%d",&x);
答案 3 :(得分:0)
int main()
{
int x;//Error here beacause you have to initialize x
//Though you may not get any errors chances of wrong output
while(x!=2)
{
printf("Type 0 to go to write program, type 1 to go to read program, type 2 to end program\n");
scanf("%d",x);//scanf("%d",&x);
if(x==0)
write();
if(x==1)
read();
}
return 0;
}
这有效。