我遇到scanf()
功能问题。当我编译并运行此代码时
int ID;
char* name = NULL;
char sex;
float quiz1;
float quiz2;
float midscore;
float finalscore;
float totalscore;
printf("please enter the student information.\n");
printf("ID: ");
scanf("%i", &ID);
printf("Name: ");
scanf(" %s", name);
printf("Sex: ");
scanf(" %c", &sex);
printf("Quiz mark(first semester): ");
scanf(" %f", &quiz1);
printf("Quiz mark(second semester): ");
scanf(" %f", &quiz2);
printf("Mid-term score: ");
scanf(" %f", &midscore);
printf("Final score: ");
scanf(" %f", &finalscore);
printf("Total score: ");
scanf(" %f", &totalscore);
我得到的是:
ID:5
姓名:alex
性别:测验标记(第一学期):测验标记(第二学期):中期成绩:最终成绩:总成绩:
有人可以解释一下我在做什么吗?
答案 0 :(得分:2)
点
scanf(" %s", name);
name
为NULL(即,它指向无效的内存位置),并将其用作%s
的参数调用undefined behavior。
您需要先将内存分配给name
,然后才能使用该内存来保存输入。
答案 1 :(得分:0)
问题在于:
char* name = NULL;
在写入任何数据之前,您需要为指针分配一些内存。您可以静态或动态分配一些空间:
char name[10];
char *name2;
name2 = malloc(10*sizeof(char));