string reverse. cannot find the bug in my code.
Hello All,
I have written a program to reverse a string using recursion. Have tried to dry run it , debug it but still can't find the issue. Below is my code:
Code:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void reverse(char *,char *);
int main()
{
char input[] = "Keshav";
char * reversed = (char *)malloc(strlen(input) +1 );
reverse(input,reversed);
puts(reversed);
return 0;
}
void reverse(char * input,char *reversed)
{
puts("entering reverse");
static int i = 0;
while(*++input != '\0')
reverse(input,reversed);
reversed[i] = *--input;
reversed[i+1] = '\0';
i++;
}
Outentering reverse
entering reverse
entering reverse
entering reverse
entering reverse
entering reverse
entering reverse
entering reverse
entering reverse
entering reverse
entering reverse
entering reverse
entering reverse
entering reverse
entering reverse
entering reverse
entering reverse
entering reverse
entering reverse
entering reverse
entering reverse
entering reverse
entering reverse
entering reverse
entering reverse
entering reverse
entering reverse
entering reverse
entering reverse
entering reverse
entering reverse
entering reverse
vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
I am not able to understand why is it entering reverse more than string-length("Keshav") times. Also when I try to debug the local variable input is always pointing to "v" but it should not as every call to reverse must have it's own pointer.
Request anybody to help.
This my first post and pardon me if I have done any mistake.
Thanks...quzah and anduril462
This was a disaster programming technique....hmm..I was using while rather than an if to check my base condition.. was stuck on this thing for so long....
Thanks guys..
Great example that when the mind bends one way.. it's tough to bend it the other way .. :P
BTW I was trying to follow such a complex path.. so as to try reversing a string without using strlen(). I wan't to further improve on this.. so that my function reverse takes only one argument and reverses that very input.. or so to say an "in place reversal". I don't want to do the below:
Code:
void reverse(char *s)
{
int i = 0;
int j = strlen(s) - 1; //don't wana replace this with a for loop to count the length.
while (i < j)
{
char c = s[i];
s[i++] = s[j];
s[j--] = c;
}
}
Any other suggestions ?
Nitin