Pointers 如何在返回char*的函数中返回指针?

Pointers 如何在返回char*的函数中返回指针?,pointers,malloc,c99,Pointers,Malloc,C99,我正在实现我自己的strrchr——它搜索参数str指向的字符串中最后出现的字符c(无符号字符) 例如: Input: f("abcabc" , "b") Output: "bc" 函数应返回char*。如何在函数中返回指向char数组的指针 #include <stdio.h> #include <string.h> char* my_strrchr(char* param_1, char param_2) { int len = strlen(pa

我正在实现我自己的strrchr——它搜索参数str指向的字符串中最后出现的字符c(无符号字符)

例如:

Input: f("abcabc" , "b")
Output: "bc"
函数应返回char*。如何在函数中返回指向char数组的指针

#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 ;

}
#包括
#包括
char*my_strrchr(char*param_1,char param_2)
{
int len=strlen(参数1);
char res;
对于(int i=len;i>=0;i--){
if(参数1[i]==参数2){
res=参数1[i];
返回*(res);
//在这里,我尝试了return(char)res,(char*)res;没有任何效果
}
}
返回NULL;
}
int main(){
char*d=“abcabc”;
字符r='b';
我的(d,r);;
返回0;
}

您试图返回的是值,而不是指针。运算符
*
表示当
res
不是指针时,通过指针获取值。您应该将其设置为指针,然后返回:

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;
}

您正在尝试返回值,而不是指针。运算符
*
表示当
res
不是指针时,通过指针获取值。您应该将其设置为指针,然后返回:

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;
}

变量res的类型为char。要获取引用,请使用引用运算符&(请参阅):


但是这将导致变量res的地址,而不是param_1数组中的地址。查看Alex的答案以获得正确的参考地址:

您的变量res是char类型的。要获取引用,请使用引用运算符&(请参阅):

但是这将导致变量res的地址,而不是param_1数组中的地址。查看Alex的答案以获得正确的参考地址: