C-扫描字符串并将其分配给结构中的char *?

时间:2016-05-29 18:56:25

标签: c struct scanf

我被要求设计一种允许您购买相机和配件的在线市场。我有一个结构" 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;

}

1 个答案:

答案 0 :(得分:1)

你可能想要m选项。将您的scanf调用更改为

scanf("%ms", &user->name);

scanf man page

可选的'm'字符。这与字符串转换(%s,%c,%[)一起使用,并且释放调用者需要分配相应的缓冲区来保存输入:而是,scanf()分配足够大小的缓冲区,并分配地址这个缓冲区对应于相应的pointerargument,它应该是一个指向char *变量的指针(这个变量不需要在调用之前初始化)。当不再需要时,调用者应随后自由(3)此缓冲区。