当前位置: 技术问答>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的东西了
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;
}
//单步后还有不懂得可以来问我