【问题标题】:Implementing a string-find method实现字符串查找方法
【发布时间】:2013-11-21 22:37:58
【问题描述】:

我正在尝试实现一个函数,该函数在全局变量中搜索第一次出现的传递字符串。找到后,我希望它以指针的形式返回匹配的字符。

但是,这不起作用:

警告:return 使指针从整数而不进行强制转换 [由 默认]

char *find(const char *s)
{
    int i = 0;
    const char *ptr = s;

    while(ptr[i])
    {
        //wordList is a global struct with a string
        if(ptr[i] == wordList->search[0])
        {
            return ptr[i];
        }
        else i+=1;
    }

    return NULL;
}

【问题讨论】:

  • 您并没有通过这样做ptr[i] == wordList->search[0]来验证两个字符串是否相等,而只是每个字符串的第一个字符
  • 里面有需要传递一个指针数组你是说吗?

标签: c


【解决方案1】:

您想返回&ptr[i] - 您的代码将找到的字符的值返回到一个指针。

此外,您正在接收 const char* 并返回 char * - 您可能应该解决这个问题 - 要么更改返回类型,要么更改返回类型或 sptr。此外,您不需要ptr - 您可以直接取消引用s

哦,如果你坚持使用 const 并且我们很挑剔,那么它可能应该是 const char* const s

【讨论】:

  • warning: return discards ‘const’ qualifier from pointer target type [enabled by default]
  • @IMX 试试:return (char *)ptr
  • 放弃 const 是很讨厌的,通常意味着你的签名错误(就像这种情况一样)。
  • @OliverMatthews 好点。也许将函数头更改为const char *find(const char *s)
【解决方案2】:

ptr[i] 的类型为 char。您需要从您的函数返回一个char 指针,因为它的返回类型是char *。使用

return &ptr[i];  

正如 Bit Fiddling Code Monkey 在他的评论中指出的那样,最好更改函数的返回类型

const char *find(const char *s) { ... } 

【讨论】:

  • return (char *)&ptr[i]; 应该删除@IMX 收到的警告。
  • @BitFiddlingCodeMonkey;是的。但它也有一些坑坑洼洼。
  • 我认为将函数头更改为 `const char *find(const char *s)' 会更好。
  • @BitFiddlingCodeMonkey;是的。这样会更好。
猜你喜欢
  • 2014-07-30
  • 2016-09-03
  • 2011-05-30
  • 2012-05-10
  • 1970-01-01
  • 2018-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多