Ваша переменная char name[10 + 1];
, очевидно, имеет длину 11 байтов. Добавление чего-либо более чем 11 байтов приведет к переполнению буфера.
Здесь может произойти переполнение буфера:
scanf("%s",&(student+i)->name);
Ваша функция дефисов может появиться после того, как вы исправили эту возможную проблему переполнения буфера.
Исправление переполнения буфера
Один простой способ решить эту проблему - это заставить сам scanf ограничить число читаемых символов:
// read only 10 chars, since `name` can only
// hold 10 chars, plus the extra NULL char
scanf("%10s", &(student+i)->name);
Предварительное заполнение дефисами
Наконец, после того, как вы позаботились о проблеме с памятью, вы можете продолжить и предварительно заполнить строку, прежде чем перезаписать ее фактическими данными ученика.
// pre-fill your data with hypens.
memset((student+i)->name, '-', sizeof((student+i)->name) - 1);
// read only 10 chars, since `name` can only
// hold 10 chars, plus the extra NULL char
scanf("%10s", &(student+i)->name);