为什么scanf扫描一个空值

use*_*218 1 c scanf

在下面的代码中:

#include <stdio.h>

int main(){

  char *name;
  int age;  
  char *gen;

  printf("Your name:");
  scanf("%s",name);

  printf("Your age:");
  scanf("%d",&age);

  printf("Your gender:");
  scanf("%s",gen);

  printf("*****************\n");

  printf("%s is a %d years old %s \n",name,age,gen);

  return 0;  

}
Run Code Online (Sandbox Code Playgroud)

当我像这样运行它:

Your name:tom
Your age:20
Your gender:male
*****************
tom is a 20 years old (null)
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,gen是一个空值,为什么scanf无法读入gen但前两个读数成功?

Jay*_*hoi 6

char *name;
char *gen;
Run Code Online (Sandbox Code Playgroud)

只是char指针,没有任何意义.所以需要为它分配内存.

你可以为它分配内存

char *name = malloc(100);
char *gen  = malloc(100);
Run Code Online (Sandbox Code Playgroud)

或定义具有预定义长度的char数组

char name[100];
char gen[100];
Run Code Online (Sandbox Code Playgroud)