我被要求设计一种允许您购买相机和配件的在线市场。我有一个结构" User"我将列出以下内容。我希望能够通过commandprompt创建用户,因此在main中有一个菜单,要求您向注册用户提供数据(名称,地点,国家等)。一切似乎都很好,直到我尝试通过扫描仪在结构中为char * name变量赋值。 (我先前初步化了struct,(name == NULL))
switch (option) {
case 1:
printf("New User Registration:\n");
user = newUser();
while (user->name == NULL) {
printf("Insert users name:\n");
scanf("%s",user->name);
printf("%s",user->name);
}
还有功能newUser()。请非常详细地说明你的答案,我对C非常陌生,对我来说非常困难。
User* newUser(){
User* user = (User*)malloc(sizeof(User));
if(user != NULL){
user->name= NULL;
user->country= NULL;
user->direction=NULL;
user->id=NULL;
user->locality=NULL;
user->phoneNumber=NULL;
user->postalCode=NULL;
user->province=NULL;
user->role = client;
}
return user;
}
答案 0 :(得分:1)
你可能想要m选项。将您的scanf调用更改为
scanf("%ms", &user->name);
可选的'm'字符。这与字符串转换(%s,%c,%[)一起使用,并且释放调用者需要分配相应的缓冲区来保存输入:而是,scanf()分配足够大小的缓冲区,并分配地址这个缓冲区对应于相应的pointerargument,它应该是一个指向char *变量的指针(这个变量不需要在调用之前初始化)。当不再需要时,调用者应随后自由(3)此缓冲区。