C语言strtok函数分割含有空值的字符串
答案:2 悬赏:40
解决时间 2021-02-14 20:10
- 提问者网友:故事与他
- 2021-02-14 10:17
C语言strtok函数分割含有空值的字符串
最佳答案
- 二级知识专家网友:丢不掉的轻狂
- 2021-02-14 11:11
如果你使用 strtok 函数, 那就没办法了.
因为strtok函数里面采用了 strspn()这个函数.
而 strspn 每次都将指针移动到第一个非 "|" 中的字符的位置.
附上源码:
#include
static char *olds;
#undef strtok
char * strtok (char *s,const char *delim)
{
char *token;
if (s == NULL)
s = olds;
s += strspn (s, delim); //将指针移到第一个非delim中的字符的位置
if (*s == '\0')
{
olds = s;
return NULL;
}
token = s;
s = strpbrk (token, delim);// 获取到delimz中字符在字符串s中第一次出现的位置
if (s == NULL)
olds = __rawmemchr (token, '\0');
else
{
*s = '\0';
olds = s + 1;
}
return token;
}
因为strtok函数里面采用了 strspn()这个函数.
而 strspn 每次都将指针移动到第一个非 "|" 中的字符的位置.
附上源码:
#include
static char *olds;
#undef strtok
char * strtok (char *s,const char *delim)
{
char *token;
if (s == NULL)
s = olds;
s += strspn (s, delim); //将指针移到第一个非delim中的字符的位置
if (*s == '\0')
{
olds = s;
return NULL;
}
token = s;
s = strpbrk (token, delim);// 获取到delimz中字符在字符串s中第一次出现的位置
if (s == NULL)
olds = __rawmemchr (token, '\0');
else
{
*s = '\0';
olds = s + 1;
}
return token;
}
全部回答
- 1楼网友:青灯壁纸妹
- 2021-02-14 11:20
char buf[20] = "abc def mmmm";
char *p = strtok(buf," ");
printf("buf=%s\n",buf);
printf("p_addr=%p\n",p);
printf("buf_addr=%p\n",buf);
输出:buf=abc,说明切割后buf中的第一个空格变成了'\0',并且打印p和buf的地址是一样的,说明切割后字符串在内存中的地址没有改变
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯