在下面的代码中:
#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但前两个读数成功?
答案 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;