如何解决请告诉我我的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
指向的字符串可以包含多个字符。
应该使用标准功能strchr
和strspn
代替功能strcspn
。
因此,整个函数定义没有任何意义。
请至少在互联网上重新阅读功能strtok
的描述。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。