在此代码中,我从目录中获取所有子目录路径。它工作得很好,但我想添加更多的东西,那就是计算所有的子目录并打印它们。如何在这个函数中做到这一点。我使用count
变量使其工作,但结果是这样的。
给出结果:
/home/runner/TestC1/file
15775232
/home/runner/TestC1/dsf
15775233
/home/runner/TestC1/main.c
15775234
/home/runner/TestC1/main
15775235
预期结果:
/home/runner/TestC1/file
/home/runner/TestC1/dsf
/home/runner/TestC1/main.c
/home/runner/TestC1/main
Counted: 4 subdirectories.
void listdir(void){
DIR *dir;
struct dirent *entry;
size_t count;
if (!(dir = opendir(path))) {
perror ("opendir-path not found");
return;
}
while ((entry = readdir(dir)) != NULL) {
char *name = entry->d_name;
if (entry->d_type == DT_DIR)
if (!strcmp(name, ".") || !strcmp(name, ".."))
continue;
snprintf (path1, 100, "%s/%sn", path, name);
printf("%s", path1);
printf("%zun", count);
count++;
}
closedir (dir);
}
你的代码有几个问题:
正如Thomas所说:
您没有初始化计数。然后在循环内打印
- 未将
count
初始化为0 - 在循环内打印。
- 你计数除了
.
和..
之外的所有内容,而不检查它是文件还是目录
这是一个(希望)修复版本的代码
void listdir(void){
DIR *dir;
struct dirent *entry;
unsigned count = 0;
if (!(dir = opendir(path))) {
perror ("opendir-path not found");
return;
}
while ((entry = readdir(dir)) != NULL) {
char *name = entry->d_name;
if (entry->d_type == DT_DIR) {
if (!strcmp(name, ".") || !strcmp(name, ".."))
continue;
count++;
snprintf (path1, 100, "%s/%sn", path, name);
printf("%s", path1);
}
}
printf("nCounted: %u subdirectories.n", count);
closedir (dir);
}
编辑:根据chux-ReinstateMonica的注释编辑我的代码
Minor:当unsigned count当然没问题时,size_t count没有什么理由。Size_t取决于内存,而不是文件空间。迂腐地可以使用uintmax_t。IAC,"% d"不是指定的与size_t匹配的说明符——从OP匹配的"%zu">
倒退了一步