| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 866 人关注过本帖
标题:strtok()函数
只看楼主 加入收藏
追寻XT
Rank: 2
等 级:论坛游民
威 望:1
帖 子:37
专家分:32
注 册:2014-8-20
结帖率:83.33%
收藏
 问题点数:0 回复次数:5 
strtok()函数
这个函数真是垃圾,设计的一点也不人性化,char * strtok(str,"分隔符"),第一个参数竟然可以为NUll,吐个槽,没别的意思!
2016-09-08 15:36
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
第一个参数是一个地址吧,为何不能为NULL?
2016-09-08 16:50
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
下面给出的fun1和fun2,你觉得哪个比较好用?我看过的所有关于代码规范的书都指出应该用fun2()的方式,因为写函数的人永远不能保证外面传进来的指针会是有效的,如果自以为是写出了fun1()的结构来,那才是是真的叫做“不人性化”

程序代码:
int main(){
char*str;
if(str)fun1(str);
fun2(str);

return 0;
}
fun1(char*p){...}
fun2(char*p){if(!str)return; ...}

类似的,strtok函数之所以可以接受一个NULL的指针,不是它二,而是它包容了二的调用。(这样比喻也不恰当,因为NULL本身就是为了辅助我们编程的一个特殊值)







[此贴子已经被作者于2016-9-8 18:07编辑过]


φ(゜▽゜*)♪
2016-09-08 18:02
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
strtok 是个垃圾我承认,我也从不用它。
但既然它这么设计了,第一个参数不给NULL那你想给什么呢?你给什么东西才能区分出程序员的意图,是想开始分割一个字符串还是正在分割中?
当然,一定不想用NULL也可以,比如起一个不同的名字。但这样还不如名字相同参数不同;
或者保存每次返回分割处的下一个地址,作为下一次strtok的第一个参数。目前你就可以这么做,只是代码变多了。
2016-09-09 09:24
追寻XT
Rank: 2
等 级:论坛游民
威 望:1
帖 子:37
专家分:32
注 册:2014-8-20
收藏
得分:0 
回复 3楼 书生牛犊
肯定是fun2()合理,调用strtok()老出错,才吐个槽,还是我自己用的不熟练,有时间我自己尝试写个类似功能的函数,谢谢回复。
2016-09-09 14:00
追寻XT
Rank: 2
等 级:论坛游民
威 望:1
帖 子:37
专家分:32
注 册:2014-8-20
收藏
得分:0 
回复 4楼 rjsp
你说的解决方法不错,有空试试,谢谢啦。
2016-09-09 14:01
快速回复:strtok()函数
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.055887 second(s), 11 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved