strtok函数的用法问题
void process()
{
char str1[81]="a,b,c,d*e";
char str2[81]=",*";
char *tok;
tok=strtok(str1,str2);
while(tok!=NULL){
cout<<tok<<'\n';
tok=strtok(NULL,str2); //为什么第一个参数为NULL
}
return;
}
问题点数:50、回复次数:7Top
1 楼werner(werner)回复于 2002-10-16 11:54:27 得分 10
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
人家就这么写的函数,只有照着用了Top
2 楼bruninfo(潜水的大鳄)回复于 2002-10-16 12:05:27 得分 0
是不是分配了静态值???
如下会发生什么???
void process()
{
char str1[81]=",*";
char str2[81]="a,b,c,d*e";
char str3[81]="x,y,z";
char *tok;
tok=strtok(str2,str1); //第一次用
tok=strtok(str3,str1); //第二次用
while(tok!=NULL){
cout<<tok<<'\n';
tok=strtok(NULL,str2); //会发生什么??
}
return;
}
Top
3 楼zhanghk(lion)回复于 2002-10-16 12:20:37 得分 10
是因为它将你找到的字符串的下一个字符改成了"\0",当你找到a时,你的源字符串str1已经变成了"a\0b,c,d*e",你可以加一句cout<<str1<<'\n'看一下.Top
4 楼bruninfo(潜水的大鳄)回复于 2002-10-16 12:47:02 得分 0
to: zhanghk(lion)
的确象你所说,strtok是将分隔符改为'\0',但指向当前位置的指针在什么地方?Top
5 楼bruninfo(潜水的大鳄)回复于 2002-10-16 12:50:44 得分 0
接上文
这位置绝不是一个NULL所能说明的,问题就在这儿Top
6 楼pi1ot(-=\Pilot/=-)回复于 2002-10-16 12:58:51 得分 20
strtok()自己有一个ststic变量来保存信息,正因为如此所以最好用可重入的strtok_r().
Top
7 楼werner(werner)回复于 2002-10-16 13:57:33 得分 10
这个东西好象说不清楚,没有原码,我debug了一下,就好象是VC 里面this指针的用法一样,指向当前位置用NULL.Top





