这是一段自己定义字符串函数strtok的代码,代码里面加粗的两行for循环里面的*start这个判断条件去掉后好像有问题,求解答

HE_BANG_BANG 2017-09-22 11:55:11
char * strPic(char *p,char *q);
char * strPic(char *p,char *q)
{
static char *start;
if(p)
start=p;
for(;*start && strchr(q,*start);start++);
if(*start==0)
return NULL;
char *req=start;
for(;*start && !strchr(q,*start);start++);
if(*start)
{
*start=0;
start++;
}
return req;
}



int main()
{
char pa[]=" ,OK This is The answer.But_I love you!";
char *c=strPic(pa," ,._");
while(c!=NULL)
{
cout<<c<<endl;
c=strPic(NULL," ,._");
}

...全文
163 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Really_want 2017-09-23
  • 打赏
  • 举报
回复
如果取消 *start 判断,在处理最后一个"you!"时,局部变量情况如下: start: "you!" q: " ,._" 此时下面的这个循环结束后将会导致start指向一个“不合适”的位置!(不一定非法,但并不是程序希望的位置。) for(;!strchr(q,*start);start++); 因为在start指向的"you!"范围内,都没有q对应的内容,所以函数strchr()在这个范围内都会返回NULL,然后start+++++++++就不知道加到哪里去了! 如果加了*start的条件,就会在"you!"后面紧接着的'\0'处停下。

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧