如何从char *函数返回指针

问题描述

我正在做由教授分配的练习。问题是: 编写函数myStrChr()。该函数具有两个参数:指向C样式字符串中第一个字符的const char * s和char c。返回指向c出现在s中的第一个外观的指针,如果c不出现在s中,则返回nullptr(0)。

我一直在尝试,但仍然无法找出解决错误方法:“从const char *到char *的无效转换”或“从char *到const char *的无效转换” 请让我修理。

merge

解决方法

如注释中所述,您需要在整个函数中始终使用 const char*,或者,如果需要 ,则返回{ )char*,那么您需要在返回之前显式消除常量。

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

第二(但不那么严重),您实际上不需要两个循环-您可以简单地合并两个循环,然后返回指向找到的字符的指针,或者,如果循环结束而没有找到匹配项,则返回{{1} }。

以下是该功能的简化版本:

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 } 字符作为nul参数,则您想返回字符串的“结束标记”的地址(实际上,std::strchr function可以),您可以通过在循环后修改c语句来做到这一点:

return