请教strtok函数:其函数的返回值是什么?

smallbear_2008 2009-10-26 11:58:35


我没怎么理解函数的说明,感觉好像是说函数的返回值是 标记的下一个字符。但是我用下面代码测试时,
发现p[0]输出的是 10,iptv,red。
首先第一个问题:如果返回值是 指向'/'之后的那个字符的指针的话,那么p[0]的输出就不应该是10,red了吧?如果这样是正确的,那么对于 "/iptv/11/22/33/44.wav",输出为什么是 iptv呢?

然后第二个问题:p[0]输出的时候,strtok才被调用一次,除了第一个'/'被置换为 \0,其他的应该都还是保持为'/',
这时候输出应该是很长的字符串吧?

请指教,谢谢!

#include<stdio.h>
#include<string.h>

int main()
{
int i=0;
char buffer[]="10/iptv/11/22/33/44.wav"; /* "/iptv/11/22/33/44.wav" ;"red,green,blue"*/
char *p[3];
char *buf = buffer;
while((p[i]=strtok(buf,"/"))!=NULL)
{
printf("p[%d]:%s\n",i,p[i]);
i++;
buf=NULL;

}
printf("buffer:%s\n",buffer);
return 0;
}
...全文
771 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ndpgreatfriends 2009-11-21
  • 打赏
  • 举报
回复 1
你们说的废话太多了,说明它的返回值是什么不久行了,说那么多干什么啊
butwang 2009-10-27
  • 打赏
  • 举报
回复
第二个问题:p[0]输出的时候,strtok才被调用一次,除了第一个'/'被置换为 \0,其他的应该都还是保持为'/',
这时候输出应该是很长的字符串吧?
==>这是字符串char buffer[]="10/iptv/11/22/33/44.wav"; 的第一个'/'被置换为 \0,其他没变,但由于字符串结束的标志是'\0',所以char buffer[]="10"了,其他的字符还在内存,但是不能用printf输出了。
mstlq 2009-10-27
  • 打赏
  • 举报
回复
楼主的用法很怪异,我不懂>_<
我只知道正常的用法……

http://www.cppreference.com/wiki/c/string/strtok
ljzh12 2009-10-27
  • 打赏
  • 举报
回复
返回被分割符分割的字符串的首地址
butwang 2009-10-27
  • 打赏
  • 举报
回复
第一个问题:
char buffer[]="10/iptv/11/22/33/44.wav";
char *p[20]; //将个数增大,由于原来的3个太小,p[4]数组越界,覆盖了字符串buffer的空间,造成
//字符串buffer出现乱码情况
char *buf = buffer;
while((p[i]=strtok(buf,"/"))!=NULL)
{
printf("p[%d]:%s\n",i,p[i]);
i++;
buf=NULL;
}
printf("buffer:%s\n",buffer);

输出的子字符串为,即被‘\’分割的所有字符串
p[0]:10
p[1]:iptv
p[2]:11
p[3]:22
p[4]:33
p[5]:44.wav
buffer:10

70,029

社区成员

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

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