ERJAN
ERJAN

Reputation: 24500

how to return a pointer in a function returning char *?

I'm implementing my own strrchr - it searches for the last occurrence of the character c (an unsigned char) in the string pointed to by the argument str.

example:

Input: f("abcabc" , "b")
Output: "bc"

the function should return char *. How can i return a pointer to the char array in the function?

#include <stdio.h>
#include <string.h>    

char* my_strrchr(char* param_1, char param_2)
{
    int len = strlen(param_1);
    char res ;
    for(int i = len; i >= 0 ;i-- ){
        if (param_1[i] == param_2){
            res = param_1[i];
            return  *(res);
            //here i tried return (char) res, (char*) res; nothing works
        }
    }

    return NULL;
}

int main(){
    char *d = "abcabc";
    char r = 'b';
    my_strrchr(d, r);
    return 0 ;

}

Upvotes: 1

Views: 601

Answers (2)

P. Rathje
P. Rathje

Reputation: 118

Your variable res is of type char. To get the reference use the reference operator & (See Meaning of "referencing" and "dereferencing" in C):

return &res

However this will result in the address of your variable res and not in the address within your param_1 array. Have a look at Alex' answer to get the correct reference address: https://stackoverflow.com/a/61930295/6669161

Upvotes: 1

Alex
Alex

Reputation: 61

You're trying to return value, not a pointer. Operator * means to get value by a pointer, when res isn't a pointer. You should make it a pointer an then return:

char* my_strrchr(char* param_1, char param_2)
{
   int len = strlen(param_1);
   char *res ; //make it a pointer
   for(int i = len; i >= 0 ;i-- ){
       if (param_1[i] == param_2){
           res = &param_1[i]; //store address of an element to a pointer
           return  res; //return a pointer
       }
   }

   return NULL;
}

Upvotes: 1

Related Questions