c中的strchr实现是否可以使其工作?

时间:2015-10-22 17:19:35

标签: c

请帮助我,我正在尝试实施strchr,当我运行此代码时,我仍然得到Null ...它有什么问题?

char *ft_strchr(const char *str, int c)
{
    int i;
    char *temp;

    i = 0;
    while (str[i])
    {
        if (str[i] == c)
        {
            *temp = str[i];
            return (temp);
        }
        else
            return (NULL);
        i++;
    }
    return (str);
}

3 个答案:

答案 0 :(得分:2)

char* ft_strchr(const char *str, int c){
size_t i;
char *temp;

i = 0;
   while (str[i])
   {
       if (str[i] == c)
       {
           temp = &str[i];
           return temp;
       }
     i++;
   }

   if(str[i]==c)
   {
      return &str[i];
   }

   return NULL;
   // You need to return NULL after scanning whole line..
   // Or it will send NULL checking after 1st character 
}

答案 1 :(得分:1)

Activity应该返回指向字符串中匹配字符的指针。你正在返回一个指针,但它并没有指向字符串。你从来没有初始化它,所以它并没有指向任何地方。

更改

strchr

为:

*temp = str[i];

答案 2 :(得分:1)

以下代码:

  • 利用C传递的值而非参考值
  • 消除了代码混乱,
  • 使用for()语句,以便编译器处理所有循环细节,
  • 消除了所有代码混乱

注意:这种表达式:*str的计算结果为true,除非指向的char为'\ 0'。

所以下面的代码遍历传入的char字符串,终止于两个条件之一。

1) a matching char is found in the string or 
2) end of string is encountered.

如果遇到字符串结尾,则return语句返回NULL,否则返回首次在字符串中找到匹配字符的地址。

char    *ft_strchr(const char *str, int c)
{
    for( ; *str && (*str != c); str++ ) ;

    return ( *str? str : NULL);
}