我有userStack
user
struct user {
int id; // ID
char login[20]; // login
char password[32]; // password md5
user *next;
};
用于向其添加节点的功能:
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;
}
当我添加第一个节点时,一切正常。
但是当我添加第二个和另一个时,我遇到了p->next = *userStack;
行的问题。
此行正确更改指针但在password
的末尾添加了垃圾。
那是我的麻烦。 感谢。
答案 0 :(得分:0)
问题在于密码数组。增加长度解决了它。
感谢代码优化建议。