链接列表。更改poiner时,在添加的节点中更改另一个值

时间:2021-01-10 07:16:44

I have linked list userStack of type user

我有类型user的链接列表userStack

struct user {
    int id;                     // ID
    char login[20];             // login
    char password[32];          // password md5
    user *next;
};

That's function for adding nodes to it:

这是向其添加节点的功能:

void addUser(user **userStack) {
    if (*userStack == NULL)
    {
        user *p = new user;
        *p = enterUser();
        p->next = NULL;
       *userStack = p;
    }
    else
    {
        user *p = new user;
        *p = enterUser(); / returns struct user (keyboard input)
        p->next = *userStack;
        *userStack = p;
    }
    printf("User is added successfully!\n");
}

user enterUser() {
     user *u = new user;
     int tmpID = -1;
     char tmpLogin[20];
     char tmpPass[20];
     char tmpPass2[20];
     std::string hashPass;
     system("cls");
     fflush(stdin);
     printf("Введите id пользователя: ");
     scanf("%d", &tmpID);
     while (isUserExists(tmpID) || tmpID < 0){
         fflush (stdin);
         if (isUserExists(tmpID))
             printf ("!!! Пользователь с таким id уже существует. \n");
         if (tmpID < 0)
             printf ("!!! ID пользователя не может быть отрицательным! \n");
         printf("Введите id пользователя: ");
         scanf ("%d", &tmpID);
     }
     u -> id = tmpID;
     fflush(stdin);
     printf("Введите имя пользователя: ");
     gets(tmpLogin);
     fflush(stdin);
     while (isUserExistsLogin(tmpLogin)){
         printf ("!!! Пользователь с таким именем уже существует. \n");
         printf("Введите имя пользователя: ");
         gets(tmpLogin);
         fflush(stdin);
     }
     strcpy(u -> login, tmpLogin);
     printf("Введите пароль пользователя: ");
     scanf ("%s", &tmpPass);
     printf ("Введите пароль повторно: ");
     scanf ("%s", &tmpPass2);
     while (strcmp(tmpPass, tmpPass2) != 0){
         if (strcmp(tmpPass, tmpPass2) != 0)
             printf ("!!! Пароли не совпадают!\n");
         printf("Введите пароль пользователя: ");
         scanf ("%s", &tmpPass);
         fflush (stdin);
         printf ("Введите пароль повторно: ");
         scanf ("%s", &tmpPass2);
     }
     hashPass = md5(tmpPass);
     strcpy(u->password, hashPass.c_str());
     printf("\n");
     return *u;
 }

When I'm adding first node all is OK.

当我添加第一个节点时,一切正常。

But when I'm adding 2nd and other I have trouble in line p->next = *userStack;. This line correctly changes pointer but adds garbage to the end of password.

但是,当我添加第二个和其他时,我遇到麻烦的行p-> next = * userStack;。此行正确更改指针但在密码末尾添加垃圾。

That's my trouble. Thanks.

那是我的麻烦。谢谢。

1 个解决方案

#1


0  

Problem was in password array. Increasing length solved it.

问题出现在密码数组中。增加长度解决了它。

Thanks for code optimization advices.

感谢代码优化建议。

#1


0  

Problem was in password array. Increasing length solved it.

问题出现在密码数组中。增加长度解决了它。

Thanks for code optimization advices.

感谢代码优化建议。