关于strtok的一点简单认识

之前写过一段代码,用strtok来解析一段文件路径,给他一层层的分开,

	char *tmpStr = "\\dir\\dir1\\dir2\\test.txt";
	char buffer[128] = {0};
	strcpy(buffer,tmpStr);
	char *p = NULL;
	p = strtok(buffer,"/\\");
	int dirNum = 0;
	while(p)
	{
		dirNum ++;
		printf("000: %s\n",p);
		p = strtok(NULL,"/\\");
	}
	//memset(buffer,0,128);
	//strcpy(buffer,tmpStr);  //here is the secret

	p = NULL;
	p = strtok(buffer,"/\\");
	while(p)
	{
		dirNum ++;
		printf("001: %s\n",p);
		p = strtok(NULL,"/\\");
	}

这个时候跑下来结果是啥:

000: dir
000: dir1
000: dir2
000: test.txt
001: dir
这就有点儿让人纳闷了,你不是应该是下面这样吗?

000: dir
000: dir1
000: dir2
000: test.txt
001: dir
001: dir1
001: dir2
001: test.txt

仔细看看buffer里面的内容才发现,第一次解析路径,循环调用strtok之后,里面的内容已经变成了下面这样:

\\dir\000dir1\000dir2\000test.txt

你这不是坑哥么?哭

所以第二次循环调用strtok后,就只剩一个dir打印出来了,

妈蛋,把那两行注释的:

		p = strtok(NULL,"/\\");
	}
	//memset(buffer,0,128);
	//strcpy(buffer,tmpStr);  //here is the secret

	p = NULL;
	p = strtok(buffer,"/\\");
memset(buffer,0,128)和strcpy(buffer,tmpStr)取消注释就好了,

把buffer里面内容清空在写一次,唉,想当初这个bug可是解了好久呀,大半天呢。发火

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值