Only by redesigning testif. Why does it need to call itself? In particular why does the last thing it does need to be to call itself? If it should call itself sometimes and not other times, then maybe an if statement would remove the infinite recursion.

It seems very complicated code for something that is essentially just a base 26 counter. If the program were to display all number combinations from 0000 to 9999, without using integers (i.e. still using the char array), how would you go about that? You'd want to increment the last digit if it's less than 9, but if it's 9 set it back to zero and increment the number to the left. And if the number to the left is 9, reset it to zero and increment the one to the left. And so on, until you're at the leftmost digit, and when that wraps round to zero you know you're done. Then when you've got that sorted, just tweak the code so that instead of counting each column from 0-9, count from a-z.