之前写过一段代码,用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可是解了好久呀,大半天呢。