C:scanf()函数不能正常工作

时间:2016-06-08 18:07:40

标签: c pointers scanf

我遇到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
  性别:测验标记(第一学期):测验标记(第二学期):中期成绩:最终成绩:总成绩:

有人可以解释一下我在做什么吗?

2 个答案:

答案 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));