You need one more [28] for the trailing '\0' to be a valid string.
Take a look to C Programming Notes: Chapter 8: Strings:
Strings in C are represented by arrays of characters. The end of the
string is marked with a special character, the null character, which
is simply the character with the value 0. (The null character has no
relation except in name to the null pointer. In the ASCII character
set, the null character is named NUL.) The null or string-terminating
character is represented by another character escape sequence, \0.
And as pointed out by Jim Balter and Jayesh, when you provide initial values, you can omit the array size (the compiler uses the number of initializers as the array size).
char greek[] = "ABGDE#ZYHIKLMNXOPQRSTUFC$W3";
char greek[] = "ABGDE#ZYHIKLMNXOPQRSTUFC$W3";