Сделай свой калькулятор с блекджеком и т.д - вначале регистрируй те русские буквы, которые будешь юзать в таблицу (для пущей эффективности память можешь выделять динамически - malloc, realloc), и при подсчёте длины строки запрашивай таблицу - есть ли буква в таблице и если есть, то отнимай 2 (или какой там у нее sizeof), если нет, отнимай 1 и это всё дело в цикле пока не дойдешь от sizeof(phrase) до 0 - инкрементируй счётчик.
Какой смысл сего действа?
Сейчас задача, грубо говоря, может быть решена двумя способами. Ну может тремя.
1. Изначально правильно определить количество символов в строке и инициализировать массив исходя из этих данных.
(не получается сделать потому, что невозможно вызвать никакую свою функцию подсчета до инициализации. Компилятор ругается)
2. После создания массива убрать у него последние n записей, где n - количество utf-8 символов.
(Не разобрался еще как это сделать и возможно ли).
3. Крутить цикл вывода на экран ровно столько раз, сколько значимых символов есть в массиве. Наплевав на пустое место в конце.
(Пока попытка реализовать это не принесла успеха).
А то что ты предлагаешь отнимать 1 или 2 уже сделано. Я добавил еще одну переменную в которой храню позицию записи в массив. и меняю её в зависимости от того был ли символ одно, или двух-байтовым. (переменная p в последнем коде.)