为什么scanf扫描一个空值

时间:2014-09-10 12:35:33

标签: 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;  

}

当我像这样运行时:

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

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

2 个答案:

答案 0 :(得分:6)

char *name;
char *gen;

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

你可以为它分配内存,如

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

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

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

答案 1 :(得分:1)

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;