Если вы еще не узнали об указателях, то самый простой способ - рекомендация Weather Vane выбрать максимальную длину имени и использовать ее для каждого подмассива в вашем 2d-массиве.
Вам не нужно «удалять эти лишние пустые (или 0)« слоты », потому что когда вы пишете строку в c или когда вы используете scanf или printf со строками, строки заканчиваются нулем. Это означает, что когда вы помещаете имя в подмассив, имя, вероятно, уже будет иметь нулевое окончание (значение 0) для обозначения конца строки. Каждое значение после этого нулевого завершения игнорируется при работе с функциями, имеющими дело со строками с нулевым символом в конце.
Например.
char name[] = "Bob";
фактически эквивалентно выполнению любого из этих:
char name[] = { 'B', 'o', 'b', '\0'}; //'\0' is a null termination
char name[] = {0x42, 0x6F, 0x62, 0x0}; // ascii hex codes, '\0' translates to 0x0
(не имеет значения, насколько велико имя [], если строка заканчивается нулем и используемые вами функции знают об этом).
Вы можете вручную вставить нулевое завершение, если по какой-то причине, когда вы вводите имя, у него его еще нет.