Основная проблема - ваша декларация:
char *empty_list[26];
определяет массив из 26 указателей на символы. В вашем текущем коде вы присваиваете каждому элементу массива адрес переменной буква. Так как это выходит за рамки, когда вы печатаете, повезло, что он печатает последний, он мог бы также вывести мусор или потерпеть крах, если код между ними был сложным. Он мог бы также распечатать дополнительный мусор после буквы с тем, что у вас уже есть, поскольку нет способа узнать, есть ли после буквы символ конца строки (\ 0). В вашем существующем коде printf("%s", *empty_list);
печатает первый указатель из массива в виде строки с нулевым символом в конце, которая, если вы проигнорируете потерю области видимости и предположите, что содержимое памяти все еще вокруг, будет последним значением из цикла, так как все указатели в вашем массив указывает на память, в которой хранится буква, и эта память имеет последнее значение из цикла.
Если вы намеревались создать массив с буквами, тогда оно должно быть:
char empty_list[27];
Это должно быть 27, так как вам нужно оставить место для символа окончания строки в конце. Один из способов заполнить это - использовать:
empty_list[26] = '\0';
после окончания цикла for и перед печатью содержимого массива (не указывайте здесь звездочку - поскольку это массив, компилятор автоматически примет адрес первого элемента):
printf("%s", empty_list);
Как упомянуто в комментариях, когда вы присваиваете значение буквы элементу в массиве, оно должно быть без амперсанда:
empty_list[i] = letter;