请告诉我我的strtok函数出了什么问题

问题描述

我如下创建了strtok函数。 但是,尽管我没有收到错误,但它没有用。 请告诉我问题出在哪里。 很抱歉,这句话很难看。

#include <stddef.h> // NULL
#include <stdlib.h> // calloc
#include <string.h> // strncpy

char* my_strtok(char *src,const char *delims) {

static char* nextgettok;
char *nxt;//トークンの先頭アドレス
char *dlm;//トークンの区切アドレス

if(*delims){
  nextgettok = src;
}else{
  src =nextgettok;
}

nxt = NULL;
while(*src)
{
  if(nxt == NULL)
  {
    if(strchr(src,*delims) == NULL)nxt = src;
  }else
  {
        if(strchr(src,*delims) != NULL)
        {
          dlm = src;
          *dlm = '\0';
          nextgettok = dlm + 1;
          break;
        }
   }
   src++;
}
  return nxt;

}

解决方法

此代码段

if(*delims){
  nextgettok = src;
}else{
  src =nextgettok;
}

没有道理。

看来你的意思

if ( src ) nextgettok = src;

这个while循环

while(*src)
{

在第一个参数等于NULL的情况下可以调用未定义的行为,并且根据函数的描述,第一个参数可以等于NULL。

在这些if语句中也调用strchr

if(strchr(src,*delims) == NULL)nxt = src;

if(strchr(src,*delims) != NULL)

也没有意义,因为delims指向的字符串可以包含多个字符。

应该使用标准功能strchrstrspn代替功能strcspn

因此,整个函数定义没有任何意义。

请至少在互联网上重新阅读功能strtok的描述。