为什么scanf扫描空值

在下面的代码中:

#include  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; } 

当我像这样运行它:

 Your name:tom Your age:20 Your gender:male ***************** tom is a 20 years old (null) 

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

 char *name; char *gen; 

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

你可以为它分配内存

 char *name = malloc(100); char *gen = malloc(100); 

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

 char name[100]; char gen[100]; 
 char *name; char *gen; 

是指针,您需要更改为数组

 char name[256];//256 is arbitrary ofc char gen[256]; 

或者用指针分配内存:

 char *name = malloc(256 * sizeof(*name)); char *gen = malloc(256 * sizeof(*gen)); 

请注意,如果使用malloc分配内存,则检查分配是否失败是一个很好的习惯:

 if (name == NULL) return -1;