c++中关于strtok函数的问题

来源:百度知道 编辑:UC知道 时间:2024/06/08 14:14:08
char sentence[]="Hello My Friend"
char *token;

token =strtok(sentence," ");
while(token!=NULL){
token=strtok(NULL," ");
cout<<token<<endl;
}
return 0;
}
运行时出错
什么 遇到问题需要关闭 那个对话框

几经调试发现如果把cout<<token<<endl;和token=strtok(NULL," ");
换个位置就不会报错~

琢磨着是不是因为strtok最后一次对sentence进行处理的时候发生什么状况?使得其超出了token的储存范围?
请高手解答~谢谢~

PS:其实本意是向将两次token的值存到另一个string里 比如将“My Friend”存到另一个string里一起输出~
直接赋值的话(string=token)只能输出"Frined"
用strcat的话有连接过去很多垃圾值~……

因为token =NULL,cout就会报错了

strtok会返回NULL在找不到token的时候,可以参考msdn

换个顺序不报错是因为while(token!=NULL)这个判断到token为Null退出循环了

几经调试发现如果把cout<<token<<endl;和token=strtok(NULL," ");
换个位置就不会报错~

-----------------------------
原因就是这个,因为最后一次token是NULL
所以cout是遇到一个空指针