I'm trying to write a simple string permutation program. The program takes a string and displays all permutations of the string. However, the code needs a little debug, and I'm out of patience. I've worked on this faaar too long. Can anyone find the problem.

The function that does the work is called perm().

Here's perm():

A[] is global and contains each permutation of str. perm() is called the first time like this:Code:void perm(char* str, int n, int len){ int i,k,j; char* tmp, ch; tmp = malloc((len+1) * sizeof(char)); if(!tmp){ puts("\ncall to malloc() failed."); exit(1); } strcpy(tmp, str); for(i=0; i<len; i++){ //rotate string i times, so next letter is first in line. for(j=0; j<i; j++){ ch = tmp[0]; for(k=0; k<len-1; k++) tmp[k] = tmp[k+1]; tmp[len-1] = ch; tmp[len] = '\0'; } A[n] = tmp[0]; for(j=0; j<len; j++) tmp[j] = tmp[j+1]; if(n<len) perm(tmp, n+1, len-1); else{ A[n+1] = tmp[0]; printf("\npermy: %s", A); } } }

where str is a pointer to a string of length len.Code:perm(str, 0, len);

The problem is the same as always, I've overstepped an array somewhere. I've run out of patience. Can you find the problem?