Неправильно записывается строка в языке С

Вот моя функция для добавления нового студента в "базу данных".

int Add(Student* database, int count) {
    struct Student student;

    puts("\nВведите ID студента: ");
    scanf("%du", &database[count].ID);

    fflush(stdin);
    puts("\nВведите ФИО студента: ");
    scanf("%s", &database[count].FIO);
    fflush(stdin);

    char sex;
    puts("\nВведите пол студента( М или Ж ): ");
    scanf(" %c", &sex);
    student.sex = sex;


    int groupNumber;
    printf("\nВ какую группу студент зачислен? (1, 2 или 3)\n\nВаш выбор: ");
    scanf("%d", &groupNumber);
    student.groupNumber = groupNumber;

    database[count] = student;
    count++;
    return count;
}

Проблема в следующем: Когда ввожу ФИО, неважно на каком языке, вместо строки записывается "ММММММММММММММММММММММММММММММММММММ". Перепробовала много всего, но ничего не помогает.

Прикладываю структуру на всякий случай:

struct Student {
    int ID;
    char FIO[100];
    char sex;
    int groupNumber;
};

Ответы (1 шт):

Автор решения: Max I

В структуре struct Student элемент char FIO[100] является указателем на char, таким образом, в

scanf("%s", &database[count].FIO);

вы берете указатель на указатель. Поэтому достаточно указать

scanf("%s", database[count].FIO);

Отвечая на вопрос, почему в этом поле лежат одни буквы "М", скорее всего это происходит из-за того, что память под "базу данных" вы выделяете с помощью malloc(), который никак не санитизирует выделенную память. Чтобы в дальнейшем избегать проблем с "мусором", который может лежать на куче, старайтесь занулять полученный участок памяти:

struct Student *s = (struct Student *)malloc(nStudents * sizeof(struct Student));
memset(s, 0, nStudents * sizeof(struct Student));

либо

struct Student *s = (struct Student *)calloc(nStudents, sizeof(struct Student));
→ Ссылка