strchr在c中的实现有可能做到这一点吗?

strchr在c中的实现有可能做到这一点吗?,c,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); }

请帮帮我,我正在尝试实现
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);
}

strchr
应该返回一个指向字符串中匹配字符的指针。您正在返回一个指针,但它没有指向字符串。您从未初始化它,因此它不会指向任何地方

改变

*temp = str[i];
致:


strchr
应该返回一个指向字符串中匹配字符的指针。您正在返回一个指针,但它没有指向字符串。您从未初始化它,因此它不会指向任何地方

改变

*temp = str[i];
致:

以下代码:

  • 利用C通过值而不是引用传递的事实
  • 消除了代码混乱
  • 使用
    for()
    语句,以便编译器处理所有循环细节
  • 消除了所有的代码混乱
注意:这种表达式:
*str
的计算结果为true,除非指向的字符是“\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);
}
以下代码:

  • 利用C通过值而不是引用传递的事实
  • 消除了代码混乱
  • 使用
    for()
    语句,以便编译器处理所有循环细节
  • 消除了所有的代码混乱
注意:这种表达式:
*str
的计算结果为true,除非指向的字符是“\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);
}

您正在通过
temp
进行间接定向,但从未初始化它。
*temp=str[i]
应该做什么?至少有4件事出错<代码>温度=什么?,
否则返回(NULL)-只需继续
返回(str)-->
NULL
,类型为
i
。处理
c==0
请在询问运行时问题时,发布干净编译并仍然显示问题的代码。建议使用调试程序在while()循环的第一次迭代中单步执行代码(建议使用for()循环。即
for(I=0;str[I];I++)
,发布的代码显示:
if str[0]!=c,然后返回NULL
str
中的所有其他字符呢?即,只检查
str
中的第一个字符。您正在通过
temp
进行间接寻址,但从未初始化它。什么是
*temp=str[I]
应该做什么?至少有4件事出错。
temp=what?
否则返回(NULL);
-继续
返回(str);
-->
NULL
,类型为
i
。处理
c==0
当询问运行时问题时,请发布干净编译后仍然显示问题的代码。建议在第一次迭代中通过while()循环使用debuggeron单步执行代码(建议改用for()循环。例如,
for(i=0;str[i];i++
,发布的代码显示:
如果str[0]!=c,则返回NULL
str
中的所有其他字符如何?也就是说,只有
str
中的第一个字符是checked@chux,现在?可以了吗?看起来不错。可能需要
(char*)和str[i]
来消除警告。候选简化:
do{if(*str==c)return(char*)str}while(*str++)
并删除
size\t i;if(str[i]==c){return&str[i];}
@chux,现在?可以吗?看起来不错。可能需要
(char*)&str i]
来消除警告。候选简化:
do{if(*str str str c)return while(*str++)
并删除
size\t[i;if(str i]==c){return&str[i];}