【问题标题】:how to return a pointer in a function returning char *?如何在返回char *的函数中返回指针?
【发布时间】:2020-05-21 08:15:49
【问题描述】:

我正在实现自己的 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 ;

}

【问题讨论】:

    标签: pointers malloc c99


    【解决方案1】:

    您正在尝试返回值,而不是指针。运算符* 表示通过指针获取值,而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;
    }
    

    【讨论】:

      【解决方案2】:

      你的变量 res 的类型是 char。要获取引用,请使用引用运算符 &(参见 Meaning of "referencing" and "dereferencing" in C):

      return &res
      

      但是这将导致您的变量 res 的地址,而不是您的 param_1 数组中的地址。查看 Alex 的答案以获得正确的参考地址:https://stackoverflow.com/a/61930295/6669161

      【讨论】:

        猜你喜欢
        • 2021-02-14
        • 2016-06-10
        • 1970-01-01
        • 2018-06-27
        • 2021-08-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多