以下是一段代码,用于遍历文件名列表,并检查它们是否等于我要查找的文件名。它们是分段文件,因此我必须使用sprintf来检查文件的特定部分。
for(i = 1; i < 4; i++){
bzero(filebuf, 500);
sprintf(filebuf, ".%s.%d",filebuf2, i);
strcpy(fileslist2, fileslist);
tok = strtok(fileslist2, "|");
while(tok != NULL){
tok = strtok(NULL, "|");
if(strcmp(tok, filebuf) == 0){
printf("Equal!\n");
i = 5;
break;
}
}
}
这里的想法是,如果找到文件,则需要打破两个循环。但是现在,如果找到文件,代码就会停止。同样,如果文件不存在,则for循环需要迭代并继续寻找下一个。这也没有发生,在tok == NULL之后,它也挂起了。任何帮助深表感谢。
答案 0 :(得分:0)
较小的修改可能有助于防止strcmp
上的NULL
for(i = 1; i < 4; i++) {
bzero(filebuf, 500);
sprintf(filebuf, ".%s.%d",filebuf2, i);
strcpy(fileslist2, fileslist);
tok = strtok(fileslist2, "|");
while(tok != NULL) {
// tok = strtok(NULL, "|"); // moved down
if(strcmp(tok, filebuf) == 0) {
printf("Equal!\n");
i = 5;
break;
}
tok = strtok(NULL, "|"); // to here
}
}