关于strtok的一点简单认识

来源:互联网 发布:网络语言黑洞什么意思 编辑:程序博客网 时间:2024/06/05 17:21

之前写过一段代码,用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 secretp = 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 secretp = NULL;p = strtok(buffer,"/\\");
memset(buffer,0,128)和strcpy(buffer,tmpStr)取消注释就好了,

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

0 0
原创粉丝点击