为什么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;