简体   繁体   中英

C Program suddenly exits after first input when using printf()

I tried this code but after entering the first input it exits. This code works fine though when the printf("hello world"); is commented out or deleted. The compiler doesn't explain anything and it doesn't show any error so I dont know the solution. What is the reason behind this?

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <stdbool.h>



bool login(bool logStatus) // takes in loggedIn value
{
    char correctUsername[16] = "admin";
    char correctPassword[16] = "admin123";
    char *inputUsername;
    char *inputPassword;
    int i, checkUsername, checkPassword;


    printf("Enter your username : \n");
    fgets(inputUsername, 16, stdin); /* Get user input for username */
    inputUsername[strlen(inputUsername) - 1] = '\0';
    // scanf("%s", &inputUsername);

    printf("Enter your password : \n");
    fgets(inputPassword, 16, stdin); /* Get user input for password */
    inputPassword[strlen(inputPassword) - 1] = '\0';
    // scanf("%s", &inputPassword);

    /* Check username and password */
    checkUsername = strcmp(correctUsername, inputUsername);
    checkPassword = strcmp(correctPassword, inputPassword);

    printf("%d %d", checkUsername, checkPassword);

    if (checkUsername == 0 && checkPassword == 0)
    {
        printf("\n\nLogged In Successful");
        logStatus = true;
        return logStatus;
    }
    else
    {
        printf("\n\nIncorrect username or password\n");
        printf("Enter any key to continue...");
        getch();
        system("cls");
    }
}

int main()
{
    int input;
    int choice;
    bool loggedIn = false;

    printf("hello world");

    login(loggedIn);

    
    return 0;
}

inputUsername and inputPassword are uninitialized pointers. You then pass them to fgets which attempts to dereference those invalid pointers. Doing so invokes undefined behavior .

Make them arrays like the username/password you're checking against.

char inputUsername[16];
char inputPassword[16];

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM