/*
* code.c
*
* TASK
* Reverse a string by reversing pointers. Function should use return
* type char* and use a char* parameter as input.
*/
#include &l
The parameters does not match up with the variable names.
reverse
has a parameter sPhrase
which is a pointer to an array of charsThis explains why there is a 'type mismatch'. I have included a fixed version, try that.
char* reverse(char *sPhrase); int main() { char sPhrase[STRMAX]; char sReverse[STRMAX]; printf("Enter string (max. 50 chars): "); gets(sPhrase); sReverse = reverse(sPhrase); return 0; } char* reverse(char* sPhrase) { /*char* sOutput[STRMAX];*/ static char sOutput[STRMAX]; int iCnt = 0, iCntRev; for (iCntRev = strlen(sPhrase)-2; iCntRev >= 0; iCntRev--) { sPhrase[iCnt] = sOutput[iCntRev]; iCnt++; } sPhrase[iCnt] = '\0'; // Don't forget to close the string return sOutput; }
The compiler is pretty smart to check for 'incompatible' types. C is strict very relaxed when it comes to this kind of thing, so the onus is on you on making sure the declarations match up with the definitions in order for a successful compile.
I have also corrected the problem with using the sOutput
variable within the reverse
function, and changed it to a static
as the variable will go out of scope and will end up with garbage, by prefixing the keyword static
will ensure that the variable remains in scope.
Edit: For some reason, I added the strike tag to strike out the line but others are seeing it somehow...???
On closer inspection, the code does not work, I have fixed it, taking into account of other people's inputs and consideration, note I have used fgets
instead of the evil gets
function as that is a breeding ground for buffer overflows, also changed the function signature to use the const
keyword for the parameter.
char * reverse(const char *sPhrase); int main() { char sPhrase[STRMAX]; char *sReverse; printf("Enter string (max. 50 chars): "); fgets(sPhrase, STRMAX - 1, stdin); sReverse = reverse(sPhrase); printf("Reversed string: %s\n", sReverse); return 0; } char *reverse(const char* sPhrase) { char* sOutput; int iCnt = 0, iCntRev; sOutput = (char *)malloc((STRMAX * sizeof(char)) + 1); if (sOutput){ for (iCntRev = strlen(sPhrase) - 1; iCntRev >= 0; iCntRev--) { *sOutput++ = sPhrase[iCntRev]; iCnt++; } *sOutput++ = '\0'; } return (sOutput - iCnt); }
Here's an excellent tutorial on pointers.
Hope this helps, Best regards, Tom.