I to jest bardzo ważne pytanie - w twoim wypadku [Woakrtia
] . fgets pobiera cały plik do końca [do eof] lub gdy zapełni bufor [milion znaków]. Gdyby testybyły zakończone znakiem nowej linii byłby problem -z funkcją strlen, która potrzebuje zera na końcu [milion znaków + '0'].
Czyli masz dwa błędy. Jeden widoczny poniżej:
http://ideone.com/w7Ypx6
A jeden widoczny dopiero przy bardzo dużym teście.
PS
zamiast:
printf("%c", a);
możesz [a nawet powinnaś
]:
printf ("%c", tekst[z]);
PS 2
I tu jest chyba dobry argument [jeden z wielu] - przewaga c++ [+ klasa string] nad c [+ char[]]. W c++ nie musisz martwić się o wielkość bufora.