如何从 char* 函数返回指针

Posted

技术标签:

【中文标题】如何从 char* 函数返回指针【英文标题】:How to return a pointer from a char* function 【发布时间】:2021-02-14 16:07:36 【问题描述】:

我正在做教授布置的练习。问题是: 编写函数 myStrChr()。该函数有两个参数:一个 const char * s 指向 C 风格字符串中的第一个字符,以及一个 char c。如果 c 没有出现在 s 中,则返回指向 c 出现在 s 中的第一次出现的指针和 nullptr (0)。

我一直在尝试,但仍然无法弄清楚如何修复错误:“从 const char* 到 char* 的无效转换”或“从 char* 到 const char* 的无效转换” 请教我修复它。

char* mystrChr(const char *s, char c)

   size_t len;
    for (size_t i = 0; s[i] != '\0'; i++)
        len++;
    
    char *p = s;    
    for (size_t i = 0; i < len; i++)
    
        if (s[i] == c)
            p = &s[i];
        else
            p = nullptr; 
    
    return p;


【问题讨论】:

现在在任何你使用普通char*的地方始终使用const char* ***.com/questions/3316562/… 是否回答了您的问题? 返回const char * 我确实将 p 从 char* 更改为 const char*。我仍然得到错误。你能举个例子更具体一点吗? 【参考方案1】:

如 cmets 中所述,您需要在整个函数中始终使用const char*,或者如果您需要返回一个(非常量)@ 987654323@ 那么你需要在返回之前明确地抛出常量。

但是您的代码中还有其他问题!最严重的是,您的第二个for 循环在找到匹配项时不会停止:您应该在找到字符后立即返回该地址

第二个(但不太严重),你真的不需要两个循环——你可以简单地将两个循环合并,然后返回一个指向找到的字符的指针,或者如果循环结束但没有找到匹配项,则返回nullptr

这是一个有效的函数的简化版本:

const char* mystrChr(const char* s, char c)

    while (*s)  // Shorthand way of writing "while (*s != '\0')"
        if (*s == c) return s; // Found a match, so return current pointer!
        ++s;
    
    return nullptr; // No match found - return signal null pointer

如果您要求您的函数返回一个非常量char* 指针,那么您可以在返回之前进行显式转换:

char* mystrChr(const char* s, char c)

    while (*s) 
        if (*s == c) return const_cast<char*>(s); // Cast away the constness
        ++s;
    
    return nullptr; // The cast is not required when using nullptr

编辑:如果,如 cmets 中所述,如果 nul 字符作为 c 参数传递(实际上是 @987654321 @ 确实),您可以通过修改循环后的return 语句来做到这一点:

const char* mystrChr(const char* s, char c)

    while (*s) 
        if (*s == c) return s;
        ++s;
    
    return (c == '\0') ? s : nullptr;

【讨论】:

代码为mystrChr(s, 0)返回一个空指针。我希望否则空字符是 C 字符串的一部分,即最后一部分。也许是do 循环? 非常感谢,阿德里安。你的解释很有用。

以上是关于如何从 char* 函数返回指针的主要内容,如果未能解决你的问题,请参考以下文章

如何使用指针从2D char数组中生成一个句子

如何编写一个函数,该函数接受一行文本,并将每个单词保存在指向 char 指针的指针中并返回该指针

如何从string类型的变量 返回一个char* 类型

C#从返回char指针的c++函数中获取字符串/字符值

调用一个形参是字符指针的函数,返回值是啥

如何在函数中交换作为指针传递的 2 个字符串?