[Courses] [C] What is wrong here??
Peter Clay
pete at flatline.org.uk
Tue Aug 13 18:45:51 EST 2002
On Tue, 13 Aug 2002, Anand R wrote:
> My purpose is to accept a string input from the user, and check whether it
> is a palindrome or not. I tried hard to figure out how to write a C function
> to reverse a string, and how to store this reversed value in another string.
> If somebody could tell me where I am going wrong here. Any pointers to
> understand this better would be greatly appreciated.
OK. Laura has already suggested that you draw what memory looks like -
I'll second that as it's the only way to really understand what's going
on.
I also reccomend thinking "there is no such thing as a string in
C". Because they're not first-class data types, things like returning
strings and passing them as arguments are fraught with possible problems.
> #include<stdio.h>
> #include<string.h>
> #include<stdlib.h>
>
> char strrev(char array[]);
> int main()
>
> {
> char string1[10];
Add a "char temp[10];" as well. It's a good idea to #define STRINGSIZE 10
as well, it helps if you want to change it later.
> fflush(stderr);
> fprintf(stderr,"\nEnter a string: ");
> fflush(stderr);
> fflush(stdin);
> fgets(string1,sizeof(string1),stdin);
Good to see you're avoiding buffer overruns here :)
At this point I would:
strncpy(temp,string1,STRINGSIZE);
temp[STRINGSIZE-1]=0; /* Ensure null termination */
strrev(temp);
> printf("\nThe reversed string is: %s\n",temp);
>
> if(strcmp(temp,strrev(string1))==0)
> {
> printf("\nPalindrome\n");
> }
> else
> {
> printf("\nSorry\n");
> }*/
>}
.. and then I would write a strrev that reversed a string in-place, by
taking a pointer to the start and a pointer to the end, then move the
pointers in swapping values along the way.
Reversing a string in-place means that you don't have to do any memory
allocation in strrev(). However, if you do this then you have to take a
copy of the original string or you can't compare it against anything
later.
Pete
--
Peter Clay | Campaign for _ _| .__
| Digital / / | |
| Rights! \_ \_| |
| http://uk.eurorights.org
More information about the Courses
mailing list