[Courses] [C] What is wrong here??
Kathryn Hogg
kjh at flyballdogs.com
Tue Aug 13 10:06:26 EST 2002
>>
>>char strrev(char array[])
>>{
>> register int i;
>> for(i=strlen(array)-1;i>=0;i--)
>> {
>> return *array;
>
> I'm mildly suprised this compiles without warnings because you say you
> return a char, but you're returning a pointer to an array.
return *array; is for all intents and purposes the same as
return array[0];
I would expect that an error in the call to strcmp since it's prototype
should be "int strcmp(const char *, const char *)" and the call to strrev()
is returning a character.
What is probably needed is for strrev to return a "char *" that is allocated
on the heap with malloc:
char *strrev(const char *s)
{
char *r = 0;
if (s == 0) {
return 0;
}
r = (char *) malloc(strlen(s) + 1);
/*now copy the input string s to r but backwards */
....
return r;
}
Don't forget to call free() on the return value from strrev when you are
done with it.
>
> so you're returning a pointer to an array which is a pointer to a char
> (return value) -> array -> (char) array[1]
> if you want to access the value you're returning you'd have to access
> it as &(return value);
That would definitely be a compiler error. If you want to return a pointer
to the first element in the array, either of these will work:
return array;
or
return &array[0];
--
Kathryn
More information about the Courses
mailing list