当前位置: 首页 > news >正文

恶心的C语言strtok函数

从C#、JAVA到C ,让我觉得像是从公产主义社会回到了原始社会,不顺手,所以很心里憋气!!!

None.gif 函数名: strtok 
None.gif功  能: 查找由在第二个串中指定的分界符分隔开的单词 
None.gif用  法: 
char   * strtok( char   * str1,  char   * str2); 
None.gif程序例: 
None.gif
None.gif#include 
< string .h >  
None.gif#include 
< stdio.h >  
None.gif
None.gif
int  main( void
ExpandedBlockStart.gifContractedBlock.gif
dot.gif
InBlock.gif   
char input[16= "abc,d"
InBlock.gif   
char *p; 
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif   
/**//* strtok places a NULL terminator 
ExpandedSubBlockEnd.gif   in front of the token, if found 
*/
 
InBlock.gif   p 
= strtok(input, ","); 
InBlock.gif   
if (p)   printf("%s\n", p); 
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif   
/**//* A second call to strtok using a NULL 
InBlock.gif   as the first parameter returns a pointer 
ExpandedSubBlockEnd.gif   to the character following the token  
*/
 
InBlock.gif   p 
= strtok(NULL, ","); 
InBlock.gif   
if (p)   printf("%s\n", p); 
InBlock.gif   
return 0
ExpandedBlockEnd.gif}
 
None.gif
下面是恶心的strtok函数,用作分割字符串
它的第二个参数不能是char*的变量,是char[]的变量则没问题
FUCK!
我做了N多次测试才发现的这个问题,害得我调试UNIX网络编程作业好长时间

这个函数的调用真是奇怪
第一次要设定参数,第二次参数竟然可以NULL
然后函数竟然能分割第一次参数设置的字符
我无语了
这样的设计也太不人性化了


下面认真的说一下这个函数,如有哪个和我一样郁闷的人发现这篇文章,或许能少走些弯路
函数第一次调用需设置两个参数, strtok(str,",") str 需要分割的串 “,”根据,分割
第一次分割的结果,返回串中第一个,之前的字串,也就是上面的程序第一次输出abc

第二次调用该函数 strtok(NULL,"."),第一个参数设置为NULL,第二个参数还是分割的依据
结果返回分割依据后面的字串,即上面的程序输出d

转载于:https://www.cnblogs.com/jht/archive/2006/04/03/365188.html

相关文章:

  • 平板电视终成市场主流
  • [原创]Java下X86机,Bytes和Int的转换
  • 五一过后第一天:)
  • [转]DVD-与DVD+格式的较量
  • 开发一个简单的WebPart
  • TXT-Access 使用DAO数据源!(VB Code)
  • 使用NUnit在.Net编程中进行单元测试
  • 沟通CTBS助华盛集团实现财务集中管理
  • 子网掩码计算小结
  • 定义本网页关键字
  • [转] 绝对实用!60款免费软件逐个点评下载
  • 2005年10大偏执狂技术
  • Document对象
  • dba的作用
  • 一个事件激活多个JavaScript函数
  • 「译」Node.js Streams 基础
  • ➹使用webpack配置多页面应用(MPA)
  • canvas 五子棋游戏
  • go语言学习初探(一)
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • JavaWeb(学习笔记二)
  • Java读取Properties文件的六种方法
  • js数组之filter
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • Redis在Web项目中的应用与实践
  • SpriteKit 技巧之添加背景图片
  • 漂亮刷新控件-iOS
  • 软件开发学习的5大技巧,你知道吗?
  • 三分钟教你同步 Visual Studio Code 设置
  • 思考 CSS 架构
  • 突破自己的技术思维
  • 推荐一个React的管理后台框架
  • 由插件封装引出的一丢丢思考
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • #NOIP 2014# day.2 T2 寻找道路
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • (03)光刻——半导体电路的绘制
  • (2)(2.10) LTM telemetry
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (六)vue-router+UI组件库
  • (转)VC++中ondraw在什么时候调用的
  • (转)平衡树
  • **Java有哪些悲观锁的实现_乐观锁、悲观锁、Redis分布式锁和Zookeeper分布式锁的实现以及流程原理...
  • *1 计算机基础和操作系统基础及几大协议
  • .NET CLR基本术语
  • .net 后台导出excel ,word
  • .net流程开发平台的一些难点(1)
  • @Async注解的坑,小心