gpt4 book ai didi

c - "dirCount"工作不正常

转载 作者:太空宇宙 更新时间:2023-11-04 12:10:22 26 4
gpt4 key购买 nike

我正在尝试计算给定路径上的目录数量,但由于某种原因它似乎无法正常工作。

DIR *dir;       //directory to read from
struct dirent *dr; //directory entry
int dirCount = 0; //count of subdirectories in directory

if(path == NULL)
{
perror("path = null");
exit(EXIT_FAILURE);
}

if(chdir(path) == -1)
{
perror("chdir failed");
exit(EXIT_FAILURE);
}

if((dir = opendir(path)) == NULL) //open directory
{
perror("opendir() error");
exit(EXIT_FAILURE);
}

while((dr = readdir(dir)) != NULL) //loop to check if leaf
{
while((strcmp(dr -> d_name, ".") == 0 || strcmp(dr -> d_name, "..") == 0) && dr != NULL) //skip "." and ".."
{
dr = readdir(dir);
}

if(dr -> d_type == DT_DIR)
{
dirCount++;
}
}
return dirCount;
}

这是代码,但似乎当我在家庭作业的某个文件上运行它时(即使路径中只有 1 个 .txt 文件)它总是返回 2,我不确定为什么.在同一个文件上使用 ls -la 时,它只输出“.”、“..”和 .txt 文件。

我已经在其他文件上尝试过它,它似乎可以工作,但由于某种原因不适用于我应该在其上使用它的特定目录,我想不出为什么。

最佳答案

按照其他人的建议,在检查 dr->d_name 之前检查 dr!=NULL 条件。您可以使用 if 语句代替第二个 while 循环

while((dr = readdir(dir)) != NULL) {    
if(dr!=NULL && (strcmp(dr -> d_name, ".") == 0 || strcmp(dr -> d_name, "..") == 0)) {
dr = readdir(dir);
continue;
}
if(dr -> d_type == DT_DIR) {
dirCount++;
}
}

关于c - "dirCount"工作不正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49205292/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com