问题描述
我如下创建了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
指向的字符串可以包含多个字符。
应该使用标准功能strchr
和strspn
代替功能strcspn
。
因此,整个函数定义没有任何意义。
请至少在互联网上重新阅读功能strtok
的描述。