当前位置:  技术问答>linux和unix

这边也来问一下,strtok函数的返回值是什么?

    来源: 互联网  发布时间:2016-07-11

    本文导语:  我没怎么理解函数的说明,感觉好像是说函数的返回值是 标记的下一个字符。但是我用下面代码测试时, 发现p[0]输出的是 10,iptv,red。 首先第一个问题:如果返回值是 指向'/'之后的那个字符的指针的话,那么p[0]的输出...



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

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

请指教,谢谢!

#include
#include

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]:%sn",i,p[i]);
     i++; 
     buf=NULL; 
     
  }
  printf("buffer:%sn",buffer);
  return 0;                 
}

|
这个函数说明确实不太好理解:
       Each  call  to  strtok()  returns a pointer to a null-terminated string
       containing the next token.
关键是要理解什么叫做"the next token"。它不一定要在/之后
对于"10/iptv/11/22/33/44.wav";  就是10
对于"/iptv/11/22/33/44.wav  就是iptv,因为第一个/之前没有其它可以算是token的东西了


|

/*
char *strtok( char *strToken, const char *strDelimit );

On the first call to strtok, the function skips leading delimiters and returns a pointer to the first token in strToken, terminating the token with a null character. More tokens can be broken out of the remainder of strToken by a series of calls to strtok. Each call to strtok modifies strToken by inserting a null character after the token returned by that call. To read the next token from strToken, call strtok with a NULL value for the strToken argument. The NULL strToken argument causes strtok to search for the next token in the modified strToken. The strDelimit argument can take any value from one call to the next so that the set of delimiters may vary.
*/
#include  
#include  

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[7]; //注意这,需要参数是7,不然就会越界了,然后你注意看下E文的第一句,再单步下。
char *buf = buffer; 
while((p[i]=strtok(buf,"/"))!=NULL) 

printf("p[%d]:%sn",i,p[i]); 
i++; 
buf=NULL; 


printf("buffer:%sn",buffer); 
return 0;                
}  

//单步后还有不懂得可以来问我

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • g++中strtok_s is not declear in this scope
  • 请问strtok(NULL,delimits)是什么意思?
  • strtok的怪問題
  • C语言切割多层字符串(strtok_r strtok使用方法)
  • mmap后能用strtok或者srtok_r吗?
  • strtok()问题
  • strtok的多线程实现


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3