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];}